Mongo: 查找没有特定字段的项

如何在 MongoDB 中搜索集合中缺少某个字段的文档?

41882 次浏览

Yeah, it's possible using $存在:

db.things.find( { a : { $exists : false } } ); // return if a is missing

如果为 true,$vis 匹配包含该字段的文档,包括字段值为 null 的文档。如果为 false,则查询仅返回不包含该字段的文档。

如果你不在乎字段是否丢失或者 null(或者从来不是 null) ,那么你可以使用略短的 and更安全:

db.things.find( { a : null } ); // return if a is missing or null

这样做更安全,因为即使字段为 null,$exists也将返回 true,这通常不是理想的结果,并且可能导致 NPE。

仅供参考,对于那些你使用 猫鼬 (v6)并尝试使用 $exists查找在您的猫鼬模式中未定义的字段,猫鼬 v6将转义它。

看这里 https://mongoosejs.com/docs/migrating_to_6.html#strictquery-is-removed-and-replaced-by-strict

例如:

const userSchema = new Schema({ name: String });
const User = mongoose.model('User', userSchema);


// By default, this is equivalent to `User.find()` because Mongoose filters out `notInSchema`
await User.find({ notInSchema: 1 });


// Set `strictQuery: false` to opt in to filtering by properties that aren't in the schema
await User.find({ notInSchema: 1 }, null, { strictQuery: false });
// equivalent:
await User.find({ notInSchema: 1 }).setOptions({ strictQuery: false });