我正在尝试选择一个文档,该文档的字段值不存在并且对于同一集合中的不同字段不为空。这是我收藏中文档的简化表示。
"item" : {
id: "abc",
previousid: null
},
"item" : {
id: "def",
previousid: "abc"
},
"item" : {
id: "pqr",
previousid: "def"
},
"item" : {
id: "xyz",
previousid: "pqr"
}
我需要找到具有未用作previousid并且其previousid不为null的id的记录。在上述情况下,我希望返回最后一条记录(版本“xyz”),因为“xyz”尚未用作 previousid。给我带来麻烦的是 self 参照的东西。
在伪代码中,它将是:
select item where id does not exist as previousid and previousid is not null
我是 MongoDB 的新手(但不是数据库)。我仔细研究了文档数小时并尝试了多种方法,例如 $ne
、$nin
、$and
和 $expr
,但我显然遗漏了一些东西。
最佳答案
您可以使用 $graphLookup
检查指定集合中是否存在该字段,并为 priviousId
db.collection.aggregate([
{ "$graphLookup": {
"from": "collection",
"startWith": "$id",
"connectFromField": "id",
"connectToField": "previousid",
"as": "data"
}},
{ "$match": { "data": [] }}
])
关于database - 查找其中一个字段的值不为空且不存在于不同字段中的 MongoDB 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57767512/