2017-10-12 12 views
1

テーブル1の名前を選択します。名前は(テーブル1からの年齢> 20を選択してください)mongo集約パイプラインでSQLサブクエリを実装する方法は?

上記のSQLサブクエリをmongo集約パイプラインに変換する方法はありますか?次のサンプルデータが与えられ

+1

をあなたは私たちにいくつかのサンプルを与えることができますデータ?そして、目的のJSON出力をお願いします。 – dnickless

答えて

1

:あなたは何ができるか

db.collection.insert([ 
    { "name": "Peter", "age": 1 }, 
    { "name": "Peter", "age": 10 }, 
    { "name": "Peter", "age": 100 }, 
    { "name": "Paul", "age": 1 }, 
    { "name": "Mary", "age": 100 }, 
]) 

はこれです:

db.collection.aggregate({ 
    $group: { 
     "_id": "$name", // group by name 
     "docs": { $push: "$$ROOT" } // push all found documents into an array per group 
    } 
}, { 
    $match: { 
     "docs.age": { $gt: 5 } // eliminate all records that do not have at least one "age" entry that's greater than 5 
    } 
}, { 
    $unwind: "$docs" // flatten the group structure into multiple documents again 
}, { 
    $replaceRoot: { 
     "newRoot": "$docs" // restore original document layout 
    } 
}) 

...もたらすであろう:

/* 1 */ 
{ 
    "_id" : ObjectId("59df15f9ad526e347ed9cda0"), 
    "name" : "Mary", 
    "age" : 100.0 
} 

/* 2 */ 
{ 
    "_id" : ObjectId("59df15f9ad526e347ed9cd9c"), 
    "name" : "Peter", 
    "age" : 1.0 
} 

/* 3 */ 
{ 
    "_id" : ObjectId("59df15f9ad526e347ed9cd9d"), 
    "name" : "Peter", 
    "age" : 10.0 
} 

/* 4 */ 
{ 
    "_id" : ObjectId("59df15f9ad526e347ed9cd9e"), 
    "name" : "Peter", 
    "age" : 100.0 
} 
関連する問題