2013-02-27 11 views
12

静的な(計算されていない)値を持つカスタムフィールドを何とか追加できますか?

私は送信前にオブジェクトを準備したいので、内部情報を含むフィールドをいくつか削除し、いくつかのエンティティIDを持つフィールドを追加する必要があります。例えば

私はこの

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

などのオブジェクトとコレクション「test」を持っていると私はENTITY_ID追加することができますどのように

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

に変換する必要があります。で、結果をループせずに54を私のコード?

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

おかげ

+0

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

答えて

18

は、私は、これは本当にばかに聞こえるかもしれ知っているが、あなたが必要なもの「を計算する」「ノーオペレーション」という表現を使用することができます。

例:

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

あり、まさにこのユースケースのための提案$リテラルオペレータはあったが、それはまだ実装されていない、あなたはそれhereに投票することができます。

+0

ありがとう、$リテラルは本当に役に立ちます。あなたの例の少しの修正 - entity_id:{$ add:[54]} – redexp

+0

right - 私はわずかに異なる例を考えていましたが、もちろん0を追加する必要はありません:) –

32

$ literalはMongo 2.6で実装されています。 だから今、あなたは簡単に書くことができます。

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

$literalを参照してください。

+0

上記の問題に対する完璧な解決策、 。 –