在mongoid上插入多个和/或嵌套字段

时间:2013-06-06 19:54:45

标签: ruby mongodb mongoid moped

我在mongodb中有以下查询db,它正确地返回我需要的内容:

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

注意字段3是一个散列,此处使用的密钥与field1中的字段1中的值相同。

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

  1. 我无法弄清楚同时采摘两个字段的语法
  2. 我找不到拔除嵌套字段的语法。
  3. 谢谢!

3 个答案:

答案 0 :(得分:7)

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

该页面上给出的示例:

queryable.only(:name, :age)

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

queryable.only(:name, :field2, :_id, 'field3.2801394')

答案 1 :(得分: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')

    其中twoone的嵌套字段,后者又是field的嵌套字段。

此外,“字段”可以是StringSymbolArray根据其文档:Mongoid::Contextual::Mongo#pluck

答案 2 :(得分:1)

Mongoid现在有一个pluck功能。

mongoid#pluck

示例:

Model.where(conditions).pluck(:specific_field)