我继承了一堆集合,每个集合都有共同的字段。 有没有办法查询" 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个集合,一个查询会很棒。
答案 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集合查询它。