sql >> Database >  >> NoSQL >> MongoDB

MongoDB geaggregeerd resultaat met twee verschillende sleutels

Gebruik de volgende aggregatiepijplijn om de gewenste lijst met ObjectIds op te halen. Dit gebruikt de $ifNull aggregatie-operator om de _id . toe te voegen veld als de array general_products veld bestaat niet:

db.products.aggregate([
    {
        "$match": {"warehouse_sku": /^1/ }
    },
    {
        "$group": {
            "_id": {
                "_id": "$_id",
                "general_products": "$general_products"
            },
            "data": {
                "$addToSet": "$_id"
            }
        }
    },
    {
        "$project": {
            "_id": 0,
            "general_products": {
                "$ifNull": ["$_id.general_products", "$data"]
            }
        }
    },
    {
        "$unwind": "$general_products"
    },
    {
        "$group": {
            "_id": null,
            "list_products": {
                "$addToSet": "$general_products"
            }
        }
    }
]);

Dit geeft je een document met een array list_products met ObjectIds:

/* 1 */
{
    "result" : [ 
        {
            "_id" : null,
            "list_products" : [ 
                ObjectId("554b9f223d77c810e8915539"), 
                ObjectId("554b9f2e3d77c810e8915549"), 
                ObjectId("554b99b83d77c810e8915436"), 
                ObjectId("554b9f173d77c810e8915533"), 
                ObjectId("554b9f143d77c810e8915530"), 
                ObjectId("554b9f123d77c810e891552f")
            ]
        }
    ],
    "ok" : 1
}



  1. hoe mongodb-aggregaat te gebruiken en volledige documenten op te halen

  2. MongoDB Back-up en herstel

  3. Overeenkomen met meerdere criteria binnen een array

  4. Mongoose - sorteer datum alleen op datumgedeelte, negeer de tijd