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

Как да преименувам полета при извършване на търсене/проекция в MongoDB?

Така че основно се използва .aggregate() вместо .find() :

db.tweets.aggregate([
    { "$project": {
        "_id": 0,
        "coords": "$level1.level2.coordinates"
    }}
])

И това ви дава желания резултат.

Версиите на MongoDB 2.6 и по-нови връщат "курсор", точно както го прави find.

Вижте $project и други оператори на рамката за агрегиране за повече подробности.

В повечето случаи трябва просто да преименувате полетата, както са върнати от .find() при обработка на курсора. За JavaScript като пример можете да използвате .map() за да направите това.

От черупката:

db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => {
  doc.coords = doc['level1']['level2'].coordinates;
  delete doc['level1'];
  return doc;
})

Или повече вградени:

db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => 
  ({ coords: doc['level1']['level2'].coordinates })
)

Това избягва всякакви допълнителни разходи за сървъра и трябва да се използва в такива случаи, когато допълнителните разходи за обработка биха надхвърлили печалбата от действителното намаляване на размера на извлечените данни. В този случай (и повечето) би било минимално и следователно по-добре да се обработи отново резултатът от курсора за преструктуриране.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да постигнем връщане назад в транзакции в mongo?

  2. Проверете удостоверяването на MongoDB с драйвер за Java 3.0

  3. MongoDB $trunc

  4. Как да създадете индекс със специфично име в MongoDB

  5. Mongo натиснете към масив вътре в масива