【问题标题】:Find document where field exist or is null查找字段存在或为空的文档
【发布时间】:2021-12-02 20:52:29
【问题描述】:

我有一个这样的文档集合:

{
"...": ...
"validated_at": null
"archived_at": null
"..." : ...
}

我想查找所有validated_atnullarchived_atnull 或文档中不存在的文档

我使用的是电机,所以我的查询有点不同,但目前我只过滤 validated_atnullarchive_at 不存在的文档:

# "$type": 10 is for null bson value
await db.fdeses.find({'validated_at': {"$type": 10}, 'archived_at': {"$exists": False}}).to_list(CURSOR_LIMIT)

我尝试使用"$or",但它不起作用。

【问题讨论】:

标签: python mongodb pymongo pymongo-3.x


【解决方案1】:

考虑以下数据库结构。我添加了一个显示预期查询结果的字段。

这似乎返回了您正在寻找的内容。

您可以通过 Mongo Playground 查看a live demo here

数据库

[
  {
    "validated_at": null,
    "shouldBeReturned": true
  },
  {
    "validated_at": 2,
    "shouldBeReturned": false
  },
  {
    "validated_at": null,
    "archived_at": null,
    "shouldBeReturned": true
  },
  {
    "validated_at": 3,
    "shouldBeReturned": false
  },
  {
    "validated_at": 5,
    "archived_at": null,
    "shouldBeReturned": false
  }
]

查询

db.collection.find({
  validated_at: null,
  archived_at: null
})

结果

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "shouldBeReturned": true,
    "validated_at": null
  },
  {
    "_id": ObjectId("5a934e000102030405000002"),
    "archived_at": null,
    "shouldBeReturned": true,
    "validated_at": null
  }
]

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2012-01-23
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多