使用find()后如何在MongoDB中找到不同的数据

时间:2018-02-14 12:33:29

标签: mongodb

所以我将其作为输出,我只需要catalog_id,因为某些 catalog_id 是重复的。

db.catalog_product.find({product_id:{$in:["5a818d72590b65042559e2d4","5a818d9a590b65042649d966","5a81dd83590b65042559e2dd"]}},{catalog_id:true}).pretty();

    {
        "_id" : ObjectId("5a818d72590b65042559e2d5"),
        "catalog_id" : "5a8127ab590b65042649d942"
    }
    {
        "_id" : ObjectId("5a818d72590b65042559e2d6"),
        "catalog_id" : "5a8127ab590b65042649d942"
    }
    {
        "_id" : ObjectId("5a818d9a590b65042649d967"),
        "catalog_id" : "5a8127ab590b65042649d942"
    }
    {
        "_id" : ObjectId("5a818d9a590b65042649d968"),
        "catalog_id" : "5a8127ab590b65042649d942"
    }
    {
        "_id" : ObjectId("5a81dd83590b65042559e2de"),
        "catalog_id" : "5a813778590b65042649d94c"
    }

1 个答案:

答案 0 :(得分:0)

为什么不尝试汇总?您可以根据键来分组项目,即所有不同的项目。示例查询看起来像,

db.catalog_product.aggregate([
        {$match: {product_id: {$in:["5a818d72590b65042559e2d4","5a818d9a590b65042649d966","5a81dd83590b65042559e2dd"]}},
        {"$group": { "_id": "$catalog_id", "cid": {$first: "$_id"} }, //distinct here
        {$project: { "_id": '$cid', "catalog_id": "$_id"}}
]).pretty();

注意:这是查找不同项目的备用聚合方式。如果您正在寻找更清洁的方式,请在评论中使用 veeram 解决方案。