【问题标题】:MongoDB - using $nin on another fieldMongoDB - 在另一个字段上使用 $nin
【发布时间】:2015-02-26 02:47:38
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

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

    > 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" ]
    

    使用该结果,您可以运行原始查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      相关资源
      最近更新 更多