2013-02-27 10 views
12

Czy mogę w jakiś sposób dodać pole niestandardowe z wartością statyczną (nie obliczoną)?

Chcę przygotować obiekty przed wysłaniem i muszę usunąć niektóre pola z wewnętrznymi informacjami i dodać pole z jakimś identyfikatorem jednostki.

Na przykład mam Collection "test" z obiektów takich jak ten

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

I muszę go przekonwertować do

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

więc jak mogę dodać ENTITY_ID: 54 bez pętli na wynik w mój kod?

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

Dzięki

+0

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

Odpowiedz

18

Wiem, że to może brzmieć naprawdę głupie, ale można użyć „no-op” wyraz „obliczyć”, co trzeba.

Przykład:

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

Było zaproponował $ dosłowne operator dokładnie tego przypadku użycia, ale nie został jeszcze wdrożony, można głosować na niego here.

+0

Dzięki, $ dosłownie naprawdę może być pomocne. Mała poprawka dla twojego przykładu - entity_id: {$ add: [54]} – redexp

+0

right - Myślałem o nieco innym przykładzie, oczywiście, że nie musisz dodawać 0 :) –

32

Należy zauważyć, że $ literal został zaimplementowany w Mongo 2.6. Więc teraz można po prostu napisać:

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

Zobacz $literal.

+0

Idealne rozwiązanie dla powyższego problemu, Naprawdę pomoc pełna . –

Powiązane problemy