MongoDB - 在另一个字段上使用 $nin

标签 mongodb

我正在使用 MongoDB 2.6.7,我正在尝试运行以下查询

Categories.find({'_id': { $nin: ancestors }})

其中 Categories 集合与 MongoDB 文档手册中使用的完全相同(具有祖先数组的模型树结构)。例如:

db.categories.insert( { _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )

但我没有得到任何结果,所以我想知道是否有可能获得 Categories 集合中所有未包含在任何文档的祖先数组字段中的文档...换句话说,没有子项的类别类别。

最佳答案

您基本上需要 categories 集合中的 ancestors 中的所有类别集。如果你有这个列表,那么你可以运行一个简单的查询:

> var ancestors = [ "Books", "Programming", "Databases" ];
> db.categories.find({ "_id" : { "$nin" : ancestors }});

如果您没有设置 ancestors,则可以使用聚合获取它。

> db.categories.aggregate([
    { "$unwind": "$ancestors" },
    { "$group":
        {
            "_id": null,
            "ancestors": { "$addToSet": "$ancestors" }
        }
    }
]);
{ "_id" : null, "ancestors" : [ "Databases", "Programming", "Books" ] }

您也可以使用 distinct() 获取此数组。

> db.categories.distinct("ancestors");
[ "Books", "Databases", "Programming" ]

根据该结果,您可以运行原始查询。

关于MongoDB - 在另一个字段上使用 $nin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28723496/

相关文章:

mongodb php-如何做类似 "INNER JOIN"的查询

MongoDB 按数组元素对文档进行排序

node.js - mongoose 到 mlab 连接问题 : UnhandledPromiseRejectionWarning: Unhandled promise rejection

php - 找不到类 'MongoClient'

node.js - 使用express、mongodb和mongoose进行本地开发

python - 相同的单词但不同的 unicode 字符

c# - MongoDB C# Driver Find not throwing System.FormatException Deserialization error 并且运行成功

java - Spring Data MongoDB 是否支持 MongoDB 3.4 整理功能?

mongodb - 蒙戈斯错误 "mirrored config server connections are not supported"

aws 上的 mongodb 自动故障转移/高可用性