2016-12-21 15 views
1

たとえば、次の2つのドキュメントを返すmongo DBクエリがあります。 (私はこの結果セットを返す集計&投影を使用しています)。集計関数を使用した複数のフィールドの参照

{ 
    "name" : { 
     "value" : "ANDERSON" 
    }, 
    "ID" : { 
     "value" : "2356" 
    }, 
} 

{ 
    "employeename" : { 
     "value" : "DAVID" 
    }, 
    "ID" : { 
     "value" : "2356" 
    }, 
} 

私のDBは、私は属性とそこに値を格納していたスキーマレス&です。同じ情報を表す複数の属性があります。例えば、ここでは「名前」&「employeename」は同じことを表します。私は最終的な出力をいくつかの一般的な属性( "Employee Name")としたい。この共通の属性は、 "name"または "employeename"のいずれかの値を持つことができます。

私は、この問題は集約でもう1つのパイプを追加することで解決できると思います。誰かがどのようにこのモンゴDBコマンドを書く方法を教えすることができます私は$を試してみましたか(それは値falseを/ trueでない返す)

db.getCollection('mycollection').aggregate([ 
    { "$project" : { 
     "name" : 1, 
     "ID" : 1, "employeename" : 1 
    }}, 
    { "$project":{ 
     "Employee Name": {$or : ["$name", "$employeename"]} 
    }} 
]) 

最終出力は

{ 
    " Employee Name" : { 
     "value" : "ANDERSON" 
    }, 
    "ID" : { 
     "value" : "2356" 
    }, 
} 

{ 
    " Employee Name" : { 
     "value" : "DAVID" 
    }, 
    "ID" : { 
     "value" : "2356" 
    }, 
} 

すべきですか?

答えて

2

$ifNull演算子を使用する場合は、パイプラインを$projectステージに短縮することもできます。

db.getCollection('mycollection').aggregate([ 
    { "$project" : { 
     "EmployeeName" : { "$ifNull": [ "$name", "$employeename" ] }, 
     "ID" : 1, 
    }} 
]) 
関連する問題