sql >> Databasteknik >  >> NoSQL >> MongoDB

Fråga för att konvertera en array till en karta över dokument med n attribut

Från MongoDB 3.4.4 och senare kan du använda $arrayToObject operator som omvandlar en array till ett enda dokument och arrayen ska vara en lista med dokument som innehåller två fält, k och v där:

Så du skulle behöva skapa en pipeline som först transformerar items array från

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

till

"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 gör det korrekt med uttrycket

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

Så din slutliga pipeline kan slå in alla ovanstående operatörer i ett enda steg med $addFields som:

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



  1. Skapa metoder för att uppdatera och spara dokument med mongoose?

  2. få alla dokument som har maxvärde med aggregering i mongodb

  3. Vad ska jag använda? Socket.io rum eller Redis pub-sub?

  4. node.js mongodb - collection.find().toArray(callback) - callback anropas inte