Domanda

Questa è una domanda molto facile, solo con un congelamento del cervello davvero brutto.Nella mia aggregazione, voglio solo rimuovere il campo '_ID' usando $project ma restituire tutto il resto.Tuttavia, sto ottenendo

.

$ Proiezione richiede almeno un campo di uscita

Penserei che sia come:

db.coll.aggregate( [ { $match .... }, { $project: { _id: 0 }}])
.

È stato utile?

Soluzione

È necessario includere esplicitamente i campi quando si utilizza l'aggregazione tramite varie operazioni di conduttura o tramite $project .Non è attualmente un modo per restituire tutti i campi se non definiti esplicitamente definiti dal nome del campo:

$project : {
   _id : 0,
   "Name" : 1,
   "Address" : 1
}
.

È possibile escludere il _id utilizzando la tecnica che hai usato e come mostrato sopra.

Altri suggerimenti

Dalla V4.2 , è possibile utilizzare $unset Operatore aggregato per rimuovere campi singoli o multipli.È inoltre possibile escludere un campo o campi da un documento incorporato utilizzando la notazione DOT.

Per rimuovere un singolo campo:

db.coll.aggregate([ { $unset: "_id" } ])
.

Per rimuovere più campi:

db.coll.aggregate([ { $unset: [ "_id" ] } ])
.

Per rimuovere i campi Embedded:

db.coll.aggregate([
   { $unset: [ "_id", "author.name" ] }
])
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top