$ match コード>
パイプラインに入るドキュメントをフィルタリングする演算子。
注文IDのリストを取得します( $ match
$ in
を使用したパイプライン
) find()<を使用する/ code>
カーソルの map()
var orderIds = db.delivery.find({"status": "DELIVERED"}).map(function(d){return d.order;});
db.orders.aggregate([
{ "$match": { "_id": { "$in": orderIds } } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])
MongoDB 3.2の場合は、 $ lookup コード>
同じデータベース内のシャーディングされていないコレクションに左外部結合を実行して、処理のために「結合された」コレクションからドキュメントをフィルタリングする演算子。
次の例は、orders
で集計操作を実行する方法を示しています。 注文
からのドキュメントを結合するコレクション delivery
からのドキュメントを使用 order
フィールドを使用したコレクション delivery
から コレクション:
db.orders.aggregate([
{
"$lookup": {
"from": "delivery",
"localField": "_id",
"foreignField": "order",
"as": "delivery_orders"
}
},
{ "$match": { "delivery_orders.status": "DELIVERED" } },
{ "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])