首页 > 解决方案 > 带有哈希字段的 MongoId:MongoDB 和 Rails 的值不同

问题描述

我在 MongoId 中有一个带有这个字段的模型:

  field :m, as: :monthly, type: Hash

该结构是每月散列,以月份编号为键,数量为值

在 Rails 控制台中查询特定行时,我有以下内容:

<_id: 5ddf95cd1dd6150008356ec6, m(monthly): {"1"=>0, "2"=>0, "3"=>3, "4"=>0, "5"=>0, "6"=>0, "7"=>0, "8"=>0, "9"=>0, "10"=>0, "11"=>0, "12"=>0}>

在 MongoDB 控制台中查询相同的 id 时,我有以下内容:

db.myCollection.find({"_id": ObjectId("5ddf95cd1dd6150008356ec6")});
{ "_id" : ObjectId("5ddf95cd1dd6150008356ec6"), "m" : { "1" : 0, "2" : 0, "3" : 0, "4" : 0, "5" : 0, "6" : 0, "7" : 0, "8" : 0, "9" : 0, "10" : 0, "11" : 2, "12" : 0 } }

我不明白为什么

我的 MongoDb 版本是 v3.4.13(shell 和服务器)

我在 Rails 5.2.2 中使用 Ruby 2.4.5 和 MongoId 7.0.2

编辑 :

以下是有关使用 MongoId 的查询和结果的信息:

MyCollection.where(id: '5ddf95cd1dd6150008356ec6').first

<MyCollection _id: 5ddf95cd1dd6150008356ec6, m(monthly): {"1"=>0, "2"=>0, "3"=>3, "4"=>0, "5"=>0, "6"=>0, "7"=>0, "8"=>0, "9"=>0, "10"=>0, "11"=>0, "12"=>1}>
MyCollection.collection.find(_id: BSON::ObjectId('5ddf95cd1dd6150008356ec6')).first

{"_id"=>BSON::ObjectId('5ddf95cd1dd6150008356ec6'), "m"=>{"1"=>0, "2"=>0, "3"=>3, "4"=>0, "5"=>0, "6"=>0, "7"=>0, "8"=>0, "9"=>0, "10"=>0, "11"=>0, "12"=>1} }

我的问题只针对这个 id 5ddf95cd1dd6150008356ec6,因为 mongodb 和 mongoid 中的其他 id 数据是匹配的

标签: ruby-on-railsmongodbmongoid

解决方案


什么是 Mongoid 查询?

使用直接集合访问使用驱动程序检索原始文档并与 Mongoid 结果进行比较:

irb(main):014:0> Band.collection.find(_id: Band.first.id).first
=> {"_id"=>BSON::ObjectId('5de4ba7b026d7c31708db208')}

验证您在同一个数据库上查询同一个集合(例如,在两个查询中使用相同的环境)。


推荐阅读