5

我在 mongodb 中有以下查询 db,它返回的正是我需要的:

 db.collection.find({field1: 2801394}, {name: 1, field2: 1, _id: 1, "field3.2801394": 1})

注意字段 3 是一个哈希,这里使用的键与字段 1 中的值相同。

如何将此查询转换为 mongoid?这里有两个主要问题,我在网上找不到任何一个单独的问题:

  1. 我无法弄清楚同时采摘两个字段的语法
  2. 我找不到提取嵌套字段的语法。

谢谢!

4

3 回答 3

7

要过滤/投影一个或多个字段,您可以使用http://mongoid.org/en/origin/docs/options.html上的 Queryable.only 。

该页面上给出的示例:

queryable.only(:name, :age)

对于嵌套字段,您可以在参数中使用字符串而不是符号:

queryable.only(:name, :field2, :_id, 'field3.2801394')
于 2013-07-29T00:45:01.953 回答
3

您可以使用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

此外,“字段”可以是StringSymbol或者Array根据它的文档:Mongoid::Contextual::Mongo#pluck

于 2018-03-29T22:37:41.380 回答
1

Mongoidpluck现在有一个功能。

mongoid#采摘

例子:

Model.where(conditions).pluck(:specific_field)
于 2015-03-05T16:38:15.890 回答