【问题标题】:Pluck multiple and/or nested fields on mongoid在 mongoid 上提取多个和/或嵌套字段
【发布时间】:2013-06-06 19:54:45
【问题描述】:

我在 mongodb 中有以下查询数据库,它返回的正是我所需要的:

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

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

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

  1. 我不知道同时提取两个字段的语法
  2. 我找不到提取嵌套字段的语法。

谢谢!

【问题讨论】:

    标签: ruby mongodb mongoid moped


    【解决方案1】:

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

    该页面上给出的示例:

    queryable.only(:name, :age)
    

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

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

    【讨论】:

      【解决方案2】:

      您可以使用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 的嵌套字段。

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

      【讨论】:

        【解决方案3】:

        Mongoid 现在有一个pluck 函数。

        mongoid#pluck

        例子:

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

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-21
        • 2011-05-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多