MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie benenne ich Felder um, wenn ich eine Suche/Projektion in MongoDB durchführe?

Also im Grunde mit .aggregate() statt .find() :

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

Und das gibt Ihnen das gewünschte Ergebnis.

MongoDB 2.6 und höhere Versionen geben einen "Cursor" zurück, genau wie find es tut.

Siehe $project und andere Betreiber von Aggregation Frameworks für weitere Einzelheiten.

In den meisten Fällen sollten Sie die Felder einfach so umbenennen, wie sie von .find() zurückgegeben werden beim Bearbeiten des Cursors. Für JavaScript als Beispiel können Sie .map() verwenden um dies zu tun.

Aus der Shell:

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

Oder mehr inline:

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

Dies vermeidet zusätzlichen Overhead auf dem Server und sollte in solchen Fällen verwendet werden, in denen der zusätzliche Verarbeitungsoverhead den Gewinn durch die tatsächliche Verringerung der Größe der abgerufenen Daten aufwiegen würde. In diesem Fall (und den meisten) wäre es minimal und daher besser, das Cursor-Ergebnis neu zu verarbeiten, um zu restrukturieren.