MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come rinominare i campi durante l'esecuzione di ricerca/proiezione in MongoDB?

Quindi fondamentalmente usando .aggregate() invece di .find() :

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

E questo ti dà il risultato che desideri.

MongoDB 2.6 e versioni successive restituiscono un "cursore" proprio come fa find.

Vedi $project e altri operatori del framework di aggregazione per maggiori dettagli.

Nella maggior parte dei casi dovresti semplicemente rinominare i campi come restituito da .find() durante l'elaborazione del cursore. Per JavaScript come esempio, puoi usare .map() per farlo.

Dalla shell:

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

O più in linea:

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

Ciò evita qualsiasi sovraccarico aggiuntivo sul server e dovrebbe essere utilizzato nei casi in cui il sovraccarico di elaborazione aggiuntivo supererebbe il guadagno dell'effettiva riduzione delle dimensioni dei dati recuperati. In questo caso ( e nella maggior parte dei casi ) sarebbe minimo e quindi meglio rielaborare il risultato del cursore per ristrutturarlo.