Mongodb:在一个查询中搜索同一字段的多个集合的最佳方法是什么

时间:2016-11-02 18:36:12

标签: mongodb

我继承了一堆集合,每个集合都有共同的字段。 有没有办法查询" EMAIL"集合A和集合B中的字段....或者我是否坚持以编程方式迭代集合?

  

db.colA.find({" EMAIL":" joe@doe.com"})

收藏A: {" _id" :ObjectId(" 58197fc91b69ba68721d4148")," UUID" :" 0b6827f2-9384-11e0-8f4a-b8ac6f949be6"," EMAIL" :" JOHNDOE@YAHEE.COM" ;," FNAME" :" JOHN"," LNAME" :" DOE"}

收藏B: {" _id" :ObjectId(" 4ed234423654fea654a654f2")," SOURCE" :" 65488451522"," EMAIL" :" JOHNDOE@YAHEE.COM" ;," FN" :" JOHN"," DOB":" 05/13/1967"}

预期行为:搜索查询将返回两个记录。

那么,为什么不查询Col A和Col B. ..我在数据库中有17个集合,一个查询会很棒。

4 个答案:

答案 0 :(得分:1)

您可以使用聚合查找来实现此目的:

db.colA.aggregate([
    {
      $lookup:
        {
          from: "colB",
          localField: "EMAIL",
          foreignField: "EMAIL",
          as: "connected_query"
        }
   }
])

然后,您的结果中会有一个名为connected_query的字段,该字段引用与colA具有相同电子邮件的colB结果。

答案 1 :(得分:1)

您无法在当前集合的单个查询中执行此操作。 您可以使用DBRefs实现此目标,但很快就会弃用(如果尚未推荐),所以除非绝对必要,否则不要使用它。

即使在17个系列上运行相同的查询也不是很优雅,我猜这仍然是最好的选择

答案 2 :(得分:0)

如果您正在谈论联接,则在mongo最新版本中启用了$ lookup。 Java doc:https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/

答案 3 :(得分:0)

没有办法做到这一点。你不得不以编程方式做到这一点。虽然MongoDB嵌入了文档,并且“实体”可能分散在许多集合中,但应该有一个代表完整实体的集合

例如,您可能拥有UserProfile集合,但用户配置文件的片段可能嵌入在其他集合中。在这种情况下,当您需要完整用户的配置文件时,您可以直接从UserProfile集合查询它。