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

mongoDB Aggregation bliver tom igen

Prøv følgende aggregeringspipeline, den returnerer ikke et tomt array for de inaktive elementer, men er tættere på resultatet:

db.collection.aggregate([
    {
        "$match": {
            "name": "Andre",
            "$or": [
                { "fruits.active": true },
                { "cars.active": true }
            ]
        }
    },
    { "$unwind": "$fruits" },
    { "$unwind": "$cars" },
    {
        "$match": {            
            "$or": [
                { "fruits.active": true },
                { "cars.active": true }
            ]
        }
    },
    {
        "$project": {
            "name": 1,
            "active_cars": "$cars.active",
            "active_fruits": "$fruits.active",
            "cars": 1,
            "fruits": 1
        }
    },
    {
        "$project": {
            "name": 1,
            "cars": {
                "$cond": [
                    { "$eq": ["$active_cars", true] },
                    "$cars",
                    {}
                ]
            },
            "fruits": {
                "$cond": [
                    { "$eq": ["$active_fruits", true] },
                    "$fruits",
                    {}
                ]
            }
        }
    },   
    { 
        "$group": {
            "_id": {
                "_id": "$_id",
                "name": "$name"
            },
            "cars": { "$addToSet" : "$cars" },
            "fruits": { "$addToSet" : "$fruits" }
        }
    },
    {
        "$project": {
            "_id": 0,
            "name": "$_id.name",
            "cars": 1,
            "fruits": 1
        }
    }    
])
 

Output

/* 1 */ { "result" : [ { "cars" : [ { "active" : true, "carname" : "GM" } ], "fruits" : [{}], "name" : "Andre" } ], "ok" : 1 }

  1. 6 nyttige værktøjer til at overvåge MongoDB-ydelse

  2. Sådan opretter du forbindelse til MongoDB fra iOS (Swift)

  3. Sådan hentes forskellige nøgler inde i et objekt i MongoDB

  4. Hvordan får man indlejret mongodb til at beholde dataene ved nedlukning af applikationer?