sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB samlet resultat med to forskellige nøgler

Brug følgende aggregeringspipeline for at få den ønskede liste over ObjectId'er. Dette bruger $ifNull aggregeringsoperator for at tilføje _id felt, hvis arrayet general_products felt eksisterer ikke:

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"
            }
        }
    }
]);

Dette vil give dig et dokument med et array list_products med ObjectIds:

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



  1. Hvordan konfigurerer man en MongoDB-klynge, der understøtter sessioner?

  2. Bruger erklæring ikke fundet i mongodb c++ driver

  3. Metaclass deligate er ikke instans

  4. Punktnotation vs. $elemMatch