首页 > 解决方案 > 始终返回零文档的 Mongo 查询

问题描述

可以编写一个始终返回集合中所有元素的查询,以 pymongo 为例:

MongoClient()["database"]["collection"].find({})

但是,由于我的代码结构,我非常希望能够构建一个相反的查询,一个在所有情况下都必须返回零元素的查询:

MongoClient()["database"]["collection"].find(null_query)

我怎样才能定义null_query,这样这是正确的?

标签: pythonmongodbpymongo

解决方案


您可以要求将任何字段放在空列表中。_id为此使用该字段似乎是合理的:

db.collection.find({_id: {$in: []}})

如果您想要更短的查询,则根本不需要使用该_id字段:

db.collection.find({_:{$in:[]}})

如果 MongoDB 版本 >= 3.4 的替代方案:

可以说,还可以询问该_id字段是否不存在,@Marco13 已建议:

db.collection.find({_id: {$exists: false}})

但是,这假设所有文档都具有该_id字段,这对于 3.4 之前的 MongoDB 版本不一定是正确的,在该版本中可以创建一个集合,db.createCollection("mycol", {autoIndexID : false})因此不会自动为所有文档提供一个_id字段。


推荐阅读