database - 查找其中一个字段的值不为空且不存在于不同字段中的 MongoDB 文档

标签 database mongodb pymongo

我正在尝试选择一个文档,该文档的字段值不存在并且对于同一集合中的不同字段不为空。这是我收藏中文档的简化表示。

"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": [] }}
])

MongoPlayground

关于database - 查找其中一个字段的值不为空且不存在于不同字段中的 MongoDB 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57767512/

相关文章:

mysql - 3 个表的 SQL 查询或连接

database - 持久化docker容器的数据库

node.js - Mongoose :子文档 CastError:转换为数组失败

python - 在 pymongo 中搜索正则表达式

python - JSON序列化MongoDB

php - Laravel Eloquent - 从摘要中获取最受欢迎的产品

javascript - 从 testcomplete 连接到本地数据库

mongodb认证模拟题

java - MongoDB java组/计数功能

mongodb - MongoDB 聚合中的 $$ROOT 是什么以及它是如何工作的?