【问题标题】:Mongo mapper (Mongo DB) embedded document multiple field searchingMongo mapper (Mongo DB) 嵌入文档多字段搜索
【发布时间】:2011-11-04 10:52:21
【问题描述】:
 "user_crawls": {
     "0": {
       "_id": ObjectId("4e4b5e1c151c0d0336000093"),
       "rand_id": "kPxMuXOY8Jfh6nXt",
       "network": "tw",
       "sourcenetwork": "874777",
       "sourceName": "Krishna",
    },
     "1": {
       "_id": ObjectId("4e4b5e1c151c0d0336000094"),
       "rand_id": "kPxMuXOY8Jfh6nXt",
       "network": "fb",
       "sourcenetwork": "145875",
       "sourceName": "Krishna",
    },
  "2": {
       "_id": ObjectId("4e4b5e1c151c0d0336000095"),
       "rand_id": "kPxMuXOY8Jfh6nXt",
       "network": "fb",
       "sourcenetwork": "145875",
       "sourceName": "Ram",
    }

我想选择网络为 fb 且来源名称为 Krishna 的文档。从上面的数据中,我通常想得到 ID 为

的第二个文档的结果

4e4b5e1c151c0d0336000094

但我正在获取所有记录

我使用以下代码收集数据

DdNetworkCrawlLink.limit(10).all(:conditions => {'user_crawls.network' => "fb",'user_crawls.sourceName' => "Krishna")

感谢您的宝贵时间

Sreeraj

【问题讨论】:

    标签: ruby-on-rails mongodb ruby-on-rails-3 mongomapper nosql


    【解决方案1】:

    在 Mongo 中查询时,您只能查询根文档。所以它也在 MongoMapper 中。

    要仅获取匹配的嵌入文档,您必须先查询所有根文档,然后将嵌入的文档从中提取出来:

    DdNetworkCrawlLink
    .limit(10)
    .all('user_crawls.network' => "fb",'user_crawls.sourceName' => "Krishna")
    .map do |dbncl|
      dcncl.user_crawls.select { |uc| uc.network == "fb" && uc.sourceName == "Krishna" }
    end.flatten
    

    由于上述代码非常复杂,建议仅在嵌入文档将始终与其父级同时使用/显示/需要时嵌入文档。

    【讨论】:

      【解决方案2】:

      我认为你错过了 ':' 字符。 在 mongomapper 的文档中它说

      Patient.all(:last_name => 'Johnson', :order => :last_name.asc)
      

      【讨论】:

      • 那不会有任何问题,我的问题不是那个
      猜你喜欢
      • 1970-01-01
      • 2020-05-25
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多