我在 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 } }
- 对于每月[3],我在 MongoDb 控制台中有 0 个,在 Rails 控制台中有 3
- 对于每月[11],我在 MongoDb 控制台中有 2 个,在 Rails 控制台中有 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数据是匹配的
最佳答案
Mongoid 查询是什么?
使用直接集合访问来使用驱动程序检索原始文档并与 Mongoid 结果进行比较:
irb(main):014:0> Band.collection.find(_id: Band.first.id).first
=> {"_id"=>BSON::ObjectId('5de4ba7b026d7c31708db208')}
验证您正在同一数据库上查询同一集合(例如,两个查询中使用相同的环境)。
关于ruby-on-rails - MongoId 与哈希字段 : values are different with MongoDB and with Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59086871/