私は以下のデータセットを持っています。アカウントでグループ化してElement_Fieldname
を列にする必要があります。Mongodbの集計行から列へ
var collection = [
{
Account:12345,
Element_Fieldname:"cars",
Element_Value:true
},
{
Account:12345,
Element_Fieldname:"boats",
Element_Value:false
}
]
これは行を列に変換しようとしましたが、機能しません。
db.getCollection('my_collection').aggregate([{
$match : {
Element_Fieldname : {
$in : ["cars", "boats"]
}
}
}, {
$group : {
_id : "$Account",
values : {
$addToSet : {
field : "$Element_Fieldname",
value : "$Element_Value"
}
}
}
}, {
$project : {
Account : "$_id",
cars : {
"$cond" : [{
$eq : ["$Element_Fieldname", "cars"]
}, "$Element_Value", null]
},
boats : {
"$cond" : [{
$eq : ["$Element_Fieldname", "day_before_water_bottles"]
}, "$Element_Value", null]
},
}
}
])
これはちょうど私に私cars
とboats
分野でnull
を与えます。どんな助けも素晴らしいだろう。
そして、これが私の望む結果である:
var desiredResult = [
{
Account:12345,
cars:true,
boats:false
}
]
あなたはそれをすばらしく解決しました。あなたはこれがどのように大規模になると思いますか?私の作業データセットは何百万人にもなるでしょうか? – Rob
まず、この場合はdisk:trueを使用する必要があります。プロセス自体は複雑ではないので、$ outを使用してこのレポートをすべてのユーザー要求で実行するのではなく、新しいコレクションに書き込もうとする可能性があります – profesor79