我在 mongodb 中有以下查询 db,它返回的正是我需要的:
db.collection.find({field1: 2801394}, {name: 1, field2: 1, _id: 1, "field3.2801394": 1})
注意字段 3 是一个哈希,这里使用的键与字段 1 中的值相同。
如何将此查询转换为 mongoid?这里有两个主要问题,我在网上找不到任何一个单独的问题:
- 我无法弄清楚同时采摘两个字段的语法
- 我找不到提取嵌套字段的语法。
谢谢!
要过滤/投影一个或多个字段,您可以使用http://mongoid.org/en/origin/docs/options.html上的 Queryable.only 。
该页面上给出的示例:
queryable.only(:name, :age)
对于嵌套字段,您可以在参数中使用字符串而不是符号:
queryable.only(:name, :field2, :_id, 'field3.2801394')
您可以使用pluck
这两个问题:
一次采摘两个字段:
Model.where(conditions).pluck(:field1, :field2)
对于采摘嵌套字段:
Model.where(conditions).pluck('field.nested_field')
奖励:如果您想要一个字段和某个其他字段的嵌套字段,您也可以这样做:
Model.where(conditions).pluck(:field1, 'field2.nested_field')
而且,即使这是可能的:
Model.where(conditions).pluck('field.one.two')
wheretwo
是嵌套字段,one
而嵌套字段又是 的嵌套字段field
。
此外,“字段”可以是String
,Symbol
或者Array
根据它的文档:Mongoid::Contextual::Mongo#pluck