sql >> Database >  >> NoSQL >> MongoDB

MongoDB Aggregation Query - Hernoem velden die zijn geretourneerd vanuit ingesloten documenten

Er zijn een aantal benaderingen hiervoor, maar dit hangt grotendeels af van uw MongoDB-versie. Recentere versies vanaf 2.6 ondersteunen de $ kaart operator die u kunt gebruiken in $project om te doen wat je wilt:

db.friend.aggregate([
    { "$project": {
        "name": 1,
        "buddies": {
            "$map": {
                "input": "$friends",
                "as": "el",
                "in": {
                    "nickName": "$$el.name",
                    "age": "$$el.age"
                }
            }
        }
    }}
])

In eerdere versies zou u $unwind om met de array-elementen te werken en opnieuw te construeren via $groep :

db.collection.aggregate([
    { "$unwind": "$friends" },
    { "$group": {
        "_id": "$_id",
        "name": { "$first": "$name" },
        "buddies": {
            "$push": {
                "nickName": "$friends.name",
                "age": "$friends.age"
            }
        }
    }}
])

Met de eerste vorm die iets efficiënter is, omdat u de array-inhoud niet de-normaliseert en meer documenten produceert die in de pijplijn zitten om te verwerken.



  1. MongoError:verbinding ONBEKEND

  2. Vraag op datum voor berichten die de afgelopen 24 uur zijn gemaakt

  3. Mongodb shell mongo:normaal is slechts één gebruik van elk socketadres (protocol/netwerkadres/poort) toegestaan. voor stopcontact:0.0.0.0:27017

  4. Recursie vraag?