sql >> Databáze >  >> NoSQL >> MongoDB

Jak přejmenuji pole při vyhledávání/projekci v MongoDB?

V zásadě tedy pomocí .aggregate() místo .find() :

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

A to vám dá výsledek, který chcete.

Verze MongoDB 2.6 a vyšší vrací "kurzor" stejně jako find.

Viz $project a dalšími operátory agregačního rámce pro více podrobností.

Ve většině případů byste měli jednoduše přejmenovat pole tak, jak je vráceno z .find() při zpracování kurzoru. Pro JavaScript jako příklad můžete použít .map() udělat to.

Z shellu:

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

Nebo více inline:

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

Tím se zabrání jakékoli další režii na serveru a mělo by být použito v případech, kdy by další režie zpracování převážila nad ziskem ze skutečného snížení velikosti načítaných dat. V tomto případě (a většině ) by bylo minimální, a proto by bylo lepší znovu zpracovat výsledek kurzoru k restrukturalizaci.



  1. Rozdělte řetězec na pole podřetězců nebo znaků v MongoDB

  2. Ekvivalent runCommand pro nodejs-native-mongodb

  3. Jak porovnat 2 kolekce mongodb?

  4. Jak používat Memcached s rámcem Yii2