2013-02-27 30 views
12

Posso aggiungere in qualche modo campi personalizzati con valore statico (non calcolato)?

Desidero preparare gli oggetti prima di inviare e ho bisogno di rimuovere alcuni campi con informazioni interne e aggiungere campi con qualche ID entità.

Per esempio io ho raccolta "test" con gli oggetti come questo

{_id: ObjectId(...), data: {...}} 

E ho bisogno di convertirlo in

{data: {...}, entity_id: 54} 

Così come posso aggiungere ENTITY_ID: 54 senza loop over risultato il mio codice?

db.test.aggregate({ $project: {_id: 0, data: 1, entity_id: ? } }) 

Grazie

+0

db.test.aggregate ({$ progetto: {_id: 0, dati: 1, entity_id: {$ add: [54]}}}) http://www.codefari.com/2015/11/project -in-mongodb-with-example.html – Singh

risposta

18

So che questo può sembrare veramente stupido, ma è possibile utilizzare un'espressione "no-op" a "calcolare" quello che ti serve.

Esempio:

db.test.aggregate({ $project : {_id:0, data:1, entity_id: {$add: [54]} } }) 

C'era una proposta di $ operatore letterale proprio per questo caso d'uso, ma non è stato ancora implementato, si può votare per esso here.

+0

Grazie, $ letteral può davvero essere utile. Piccola correzione per il tuo esempio - entity_id: {$ add: [54]} – redexp

+0

right - Stavo pensando ad un esempio leggermente diverso, ovviamente non hai bisogno di aggiungere 0 :) –

32

Si noti che $ literal è stato implementato in Mongo 2.6. Così ora si può semplicemente scrivere:

db.test.aggregate(
    {$project: {_id: 0, data: 1, entity_id: {$literal: 54}}}) 

Vedi $literal.

+0

Soluzione perfetta per il problema precedente, Really help full . –

Problemi correlati