如何编写mongo查询以使用集合B中不存在的特定参数获取集合A中的所有元素?
我有一个名为some_classes的集合,如下所示:
{
{
"docid": "someID",
"_id": objectId(somenumbers),
"type": "X",
"id_code": {
"first": "364",
"second": "143",
"third": "Apple"
},
{
"docid": "someID",
"_id": objectId(somenumbers),
"type": "X",
"id_code": {
"first": "364",
"second": "143",
"third": "MH"
}
}
我有另一个名为master_classes的集合,如下所示:
{
{
"_id": objectId(somenumbers),
"id_code": {
"first": "364",
"second": "143",
"third": "MH"
},
{
"_id": objectId(somenumbers),
"id_code": {
"first": "364",
"second": "143",
"third": "ZH"
},
}
我需要在some_classes中获取docid =" someID"并输入=" x"那些没有匹配的" id_code"在master_classes中。
有没有一种有效的方法来实现这一目标?我想也许我可以使用聚合和查找来实现这一点,但我并不完全确定。
答案 0 :(得分:1)
您无法在MongoDB中同时跨多个集合执行查询。您必须执行两个单独的查询,并使用$nin
运算符过滤掉结果:
首先,您获得id_codes
中所有不同的master_classes
:
const ids = db.master_classes.distinct("id_code")
现在,您已将先前some_classes
变量中已有id
的结果倾斜:
db.some_classes.find({
docid: "someID",
type: "x",
id_code: { $nin: ids }
});