1
Iを別々にうまく機能する2つのMongoの集計クエリがある - 最初のクエリは、ドキュメント、{ "to_count" のトップレベル要素の集計データを返すトップレベル要素と1レベル下位配列要素を1つのmongoクエリで集計する方法は?
db.transfer_orders.aggregate([
{
$match: {
"request_timestamp": { $gte: ISODate("2017-10-00T00:00:00.000Z") },
"request_timestamp": { $lt: ISODate("2017-10-12T00:00:00.000Z") },
"purpose": "POSITIONING"
}
},
{
$group: {
_id: null,
to_count: { $sum: 1 },
qty: { $sum: "$quantity" }
}
},
{
$project: {
_id: 0,
"to_count": "$to_count",
"qty": "$qty"
}
}
])
と
db.transfer_orders.aggregate([
{
$match: {
"request_timestamp": { $gte: ISODate("2017-10-00T00:00:00.000Z") },
"request_timestamp": { $lt: ISODate("2017-10-12T00:00:00.000Z") },
"purpose": "POSITIONING"
}
},
{
$unwind: "$adjustments"
},
{
$group: {
_id: null,
totalChangeQty: { $sum: "$adjustments.change_in_quantity"}
}
},
{
$project: {
_id: 0,
"adjusted_quantity": "$totalChangeQty"
}
}
])
を:7810 、 "qty":19470}
第2のクエリは、「調整」配列の最上位の1レベル下の要素の集計データを返します。{「adjusted_quantity」:-960}
これを両方のデータセットを返す1つのクエリとして記述する方法はありますか?
Iは、上記のクエリを実行すると、私はこの結果を得る - { "_id":ヌル、 "to_count":7810、 "数量":19470、 "adjusted_quantity":0} – rmulay
chridam - "調整" とは、あります【 \t \t { \t \t \t "adjustment_id": "113179"、 \t \t \t "new_quantity":0、 \t \t \t "change_in_quantity":-1 '\t "調整" - このような要素を含む配列、 \t \t \t "CREATED_BY": "WMS"、 \t \t \t "EVENT_TIMESTAMP":ISODate( "2017-10-11T06:05:48.459Z")、 \t \t \t "request_timestamp":ISODate( "2017から10 -11T06:05:48.459Z ")、 \t \t \t "sent_to_move_topic"、真 \t \t \t "send_attempt_timestamp":ISODate(" 2017-10-11T06:05:48.459Z」) \t \t} \t] ' なので、 "$ sum"とは思えません。 "$ adjustments.change_in_quantity"は$ unwindを使わないで配列の要素を合計できますか? – rmulay
最後の '' $ first ''を' '$ sum" 'で置き換えると動作します。 – dnickless