2013-12-10 4 views
10

MongoDB投影で、いくつかの新しいフィールドを指定する方法はありますか(同時に、パイプラインの投影ステージに入力されたフィールドを保持します)?私は既存のフィールドの名前を変更するつもりはありません。

私は「フィールド1」と「フィールド2」を持っているコレクションを開始し、以下の投影を行うのであれば:

{ $project: { field3: { $gt: ['$field1', 10] } } } 

を私は「フィールド1」、「フィールド2」、および「で終わるしたいですフィールド3は、次のステージへの入力として、または集約フレームワークからの出力として存在します。

私は_idを除外して投影を除外モードにしようとしましたが、動作しません。

+2

この質問は、いくつかの有用な(異なる)回答とともに、http://stackoverflow.com/questions/19431773/mongodb-aggregation-project-include-all-fields-plus-new-oneでも提起されています。 –

答えて

1

デフォルトでは、_idのみが投影されます。他のどのフィールドを投影する必要があるかを指定する必要があります。あなたが「ドンので、それが現在のパイプライン・ステージで処理されている完全なドキュメントが含まれます:

{ $project: { field1:1,field2:1, field3: { $gt: ['$field1', 10] } } } 

または

{ $project: { field1:'$field1',field2:'$field2', field3: { $gt: ['$field1', 10] } } } 
+1

投影の入力として存在するすべてのフィールドがわかっている場合に機能します。これは自動化された生成プロセスの一部であるため、任意の投影前にどのフィールドが利用可能かを把握することは困難です(不可能ではありませんが、理想的ではありません)。私は自動的にそれらの既存のフィールドを通過させることができる解決策を探しています(しかし、これは存在しないかもしれません。 – BraedenP

+0

'_idフィールドは常にdefault.'に含まれています.'ステートメントはhttp://docs.mongodb.org/manual/reference/operator/aggregation/project/で残りはデフォルトでは投影されないことを暗示しています。 – 4J41

9

のMongoDB 2.6はほとんどが何をしたいん新しい$$ROOT集計変数を導入しましたどのフィールドを含めるべきかを知る必要があります。

あなたの例の集合を取り、$$ROOTfields投影を追加:

{ 
    "_id" : ObjectId("53b56cc542974939144cee2a"), 
    "field3" : false, 
    "fields" : { 
     "_id" : ObjectId("53b56cc542974939144cee2a"), 
     "field1" : 1, 
     "field2" : 2, 
     "field3" : 3 
    } 
} 

のMongoDB 3.3:

db.pipeline.aggregate(
    { $project: { 
     field3: { 
      $gt: ['$field1', 10] 
     }, 
     fields: "$$ROOT" 
    }} 
) 

出力が共に新しい計算フィールド(複数可)とすべての元のフィールドを含むことになります。 11は、あなたが望むことを実行するアグリゲーションステージaddFieldsを導入しました。 MongoDB Issue Tracker:SERVER-5781 - Implement $addFields aggregation stage for using expression language to add new fields to a documentのこのエントリを参照してください。

5

$projectは、どのフィールドを通過させるかを指定する必要があります。$addFieldsは、すべてのフィールドを返し、指定されたフィールドを追加または置換します。

{ $addFields: { field3: { $gt: ['$field1', 10] } } } 

あなたが望むものを正確に達成します。

この機能はMongoバージョン3.4で追加されました。

+0

あなたは私の人生を救った – user2486322

関連する問題