sql >> Database >  >> NoSQL >> MongoDB

Query om een ​​array te converteren naar een kaart van documenten met n attributen

Vanaf MongoDB 3.4.4 en hoger kunt u de $arrayToObject operator die een array omzet in een enkel document en de array moet een lijst met documenten zijn die twee velden bevat, k en v waar:

U zou dus een pijplijn moeten maken die eerst items . transformeert array van

"items":[  
    {  
      "id":"AB-02",
      "qty":2
    },
    {  
      "id":"AB-03",
      "qty":0
    },
    {  
      "id":"AB-03",
      "qty":9
    }
]

naar

"items" : [ 
    {
        "k" : "AB-02",
        "v" : {
            "id" : "AB-02",
            "qty" : 2.0
        }
    }, 
    {
        "k" : "AB-03",
        "v" : {
            "id" : "AB-03",
            "qty" : 0.0
        }
    }, 
    {
        "k" : "AB-03",
        "v" : {
            "id" : "AB-03",
            "qty" : 9.0
        }
    }
]

$map doet dat correct met de uitdrukking

"$map": {
    "input": "$items",
    "as": "item",
    "in": {
        "k": "$$item.id",
        "v": "$$item"
    }                            
}

Dus uw uiteindelijke pijplijn kan alle bovenstaande operators in één fase inpakken met $addFields als:

db.collection.aggregate([
    {
        "$addFields": {
            "items": {
                "$arrayToObject": {
                    "$map": {
                        "input": "$items",
                        "as": "item",
                        "in": {
                            "k": "$$item.id",
                            "v": "$$item"
                        }                            
                    }
                }
            }
        }
    }
])



  1. Splits een tekenreeks door een teken in Lua

  2. Kunnen we spring data repository gebruiken om ingesloten documenten in mongodb bij te werken?

  3. ClusterControl integreren met SNMP - een proof of concept:deel één

  4. SignalR kan geen verbinding maken met Azure Redis op SSL