MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Заявка за агрегиране на MongoDB - Преименуване на полета, върнати от вградени документи

Има няколко подхода за това, но до голяма степен зависи от вашата версия на MongoDB. По-нови версии от 2.6 и нагоре поддържат $ карта оператор, който можете да използвате в $project за да правите каквото искате:

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

В предишни версии бихте използвали $unwind за работа с елементите на масива и повторно конструиране чрез $group :

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

Като първата форма е малко по-ефективна, тъй като не денормализирате съдържанието на масива и не произвеждате повече документи в конвейера за обработка.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Проверете дали полето съществува в поддокумент на масив

  2. Метеор и DBRefs

  3. Как да върнете само стойността в MongoDB

  4. Как да проверите дали $addToSet на Mongo е дубликат или не

  5. Транзакции в MongoDB