我一直在使用各种术语组合搜索MongoDB查询语法,看看我是否能找到我想要创建的查询类型的正确语法。
我们有一个包含带数组字段的文档的集合。此数组字段包含与文档关联的项目ID。
我希望能够检查某个项目是否已多次关联。如果它有多个文档将在其数组字段中出现id元素。
我事先并不知道要检查的ID,因为我不知道哪些项目多次关联。我试图发现这一点。查询在其数组字段中具有特定值的所有文档将相对简单。
我需要的是一些查询可以返回其数组字段的一个元素也出现在不同文档的数组字段中的所有文档。
我不知道该怎么做。在SQL中,子查询可能是可能的。在Mongo查询语言中我不知道如何做到这一点,或者即使它可以完成。
答案 0 :(得分:0)
您可以使用$lookup
自行加入行,并在匹配时输出文档,并$project
排除,以删除3.6 mongo版本中的联接字段。
$push
数组非等式的 []
匹配到匹配文档的输出文档。
db.col.aggregate([
{"$unwind":"$array"},
{"$lookup":{
"from":col,
"localField":"array",
"foreignField":"array",
"as":"jarray"
}},
{"$group":{
"_id":"$_id",
"fieldOne":{"$first":"$fieldOne"},
... other fields
"jarray":{"$push":"$jarray"}
}},
{"$match":{"jarray":{"$ne":[]}}},
{"$project":{"jarray":0}}
])