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

Hvordan omdøber jeg felter, når jeg udfører søgning/projektion i MongoDB?

Så grundlæggende ved at bruge .aggregate() i stedet for .find() :

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

Og det giver dig det resultat, du ønsker.

MongoDB 2.6 og nyere versioner returnerer en "cursor" ligesom find gør.

Se $project og andre aggregeringsrammeoperatører for flere detaljer.

I de fleste tilfælde skal du blot omdøbe felterne som returneret fra .find() når du behandler markøren. For JavaScript som et eksempel kan du bruge .map() at gøre dette.

Fra skallen:

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

Eller mere inline:

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

Dette undgår yderligere overhead på serveren og bør bruges i sådanne tilfælde, hvor de ekstra behandlingsomkostninger ville opveje gevinsten ved den faktiske reduktion i størrelsen af ​​de hentede data. I dette tilfælde (og de fleste) ville det være minimalt og derfor bedre at genbehandle markørresultatet for at omstrukturere.



  1. Hvorfor kan mit Redis Lua-script ikke atomisk opdatere nøgler på forskellige Redis Cluster-noder?

  2. Mongoose returnerer altid et tomt array NodeJS

  3. Skal 'StackExchange.Redis.ConnectionMultiplexer' være 'AddSingleton' eller 'AddScope' i .NET Core afhængighedsinjektion?

  4. Unicode i python