我对mongo查询中$unwind
的位置有疑问。我在他们的文档中找不到任何相关内容,所以我在这里问:)也许有人可以向我解释一下。
我具有以下查询结构
collection.aggregate([
{ '$lookup': { from: 'bill_position', localField: 'billPositions', foreignField: '_id', as: 'joined_bill_pos' } },
{ '$unwind': '$joined_bill_pos' },
{ '$match': { '$and': [
{
$or: [
{ 'joined_bill_pos.pricelistItem.itemType': { '$in': [ // some data .. ] } },
{'joined_bill_pos.isPackage': {$eq: true}},
]
},
{ date: { '$gte': 1485903600000 } }, { date: { '$lte': 1582930799000 } },
{ closed: true },
{ '$group': { _id: {
name: '$joined_bill_pos.pricelistItem.itemType',
isPackage: '$joined_bill_pos.isPackage' },
count: { '$sum': '$joined_bill_pos.quantity' },
total: { '$sum': { '$subtract': [ '$joined_bill_pos.totalPrice', '$joined_bill_pos.discount' ] } } } } ]
)
在我犯错并放置
之前,现在看来工作正常{ '$unwind': '$joined_bill_pos' },
之后
{ '$match': { '$and': [ ....
我的问题是,如果$unwind
在比赛结束后仍然可以正常工作?为什么结果不同?作为附加信息,billPositions
(在查找中)是一个ID数组。
答案 0 :(得分:0)
我也想知道展开的作用是什么,最后根据我的理解,它将把查找的数组结果解构为对象结果列表。
执行并检查两个查询的结果。您将对此有所了解。
collection.aggregate([
{ '$lookup': { from: 'bill_position', localField: 'billPositions', foreignField: '_id', as: 'joined_bill_pos' } }
])
collection.aggregate([
{ '$lookup': { from: 'bill_position', localField: 'billPositions', foreignField: '_id', as: 'joined_bill_pos' } },
{ '$unwind': '$joined_bill_pos' }
])