ruby-on-rails - 带有哈希字段的 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 } }
- 对于每月[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')}
验证您在同一个数据库上查询同一个集合(例如,在两个查询中使用相同的环境)。
推荐阅读
- python - 如果消息内容有一个数字后跟一个字母,那么做一些事情
- c - 为什么在我的结构名称中使用 char* 时会出现 seg 错误,但在使用 char[] 时却没有?
- assembly - 如何在 x86_64 asm 中调用 malloc
- c# - 如何独立提交表单的不同部分?
- http - 负载均衡器不服务 HTTP 请求时是否需要 HSTS
- c++ - 使用 std::sort 计算交换
- python - 将函数应用于数据框并仅在 Python 中返回部分字典
- c# - ASP.NET Core HTML Helper 未设置日期的默认值
- php - 是否可以将自定义字段添加到 Word Press 页面,类似于帖子的自定义元框?
- .net - 如何在 Ubuntu Linux 上的 .Net Core 应用程序中使用 PowerShell SDK 包?