获取集合中不符合条件的所有文档

Get all documents in collection that do not match criteria

本文关键字:文档 条件 集合 不符合 获取      更新时间:2023-09-26

我有一个给定的查询criteria,它可能会也可能不会返回collection的一些文档。我想得到所有不满足criteria的文件。所以基本上如果我使用collection.find(criteria)collection中的所有文档都找不到.

我有两种方法:

  1. 否定查询。我尝试了collection.find({$not: criteria})抛出错误。
  2. 获取所有文档并减去与criteria匹配的文档:collection.find() '' collection.find(criteria)以"''"为补码运算符。- 但我不知道该怎么做。

你能给我一个Javascript/Node的代码示例吗?

我认为您的查询必须如下所示:

db.collection.find( { field: { $nin: [ "value_1", "value_2" ] } } );

$not用于与其他比较运算符混合,例如:

db.inventory.find( { price: { $not: { $gt: 1.99 } } } )

尝试使用$not时抛出的错误(无论它是什么)表明您没有正确使用它。Mongo $not文档显示了以下示例:

db.inventory.find( { price: { $not: { $gt: 1.99 } } } )

如果criteria是复杂的查询,则此操作将不起作用。您需要将其分解为每个字段的单独条件,并适当地应用它。

或者,要查找另一个集合(补码)中不存在的项目集,您可以尝试如下操作:

var setA = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var setB = ['c', 'd', 'g'];
var complement = setA.filter(function (item) {
    return setB.indexOf(item) === -1;
}); 

有关特定于 Mongo 的更具体的实现,请查看 $setDifference 操作,它:

取两个集合并返回一个数组,其中包含仅 存在于第一组中