集合商品具有item_code、tax_category_code和价格。
{'item_code':'A001', 'tax_category_code':'T001', 'price': 98},
{'item_code':'A002', 'tax_category_code':'T002', 'price': 39},
{'item_code':'A003', 'tax_category_code':'T001', 'price': 77},
{'item_code':'A004', 'tax_category_code':'T003', 'price': 52},
收集tax_schema具有状态、类别和日期。每个类别都具有tax_category_code和百分比。
{'status':'active', 'categories': [ {'tax_category_code':'T001', 'priority': 1, 'percentage': 0.1}, {'tax_category_code':'T002', 'priority': 3, 'percentage': 0.5}, {'tax_category_code':'T003', 'priority': 2, 'percentage': 0.87} ], 'date': '2022-11-24T00:00:00-05:00'},
{'status':'inactive', 'categories': [ {'tax_category_code':'T001', 'priority': 0, 'percentage': 0.08}, {'tax_category_code':'T002', 'priority': 2, 'percentage': 0.42}, {'tax_category_code':'T003', 'priority': 4, 'percentage': 0.74} ], 'date': '2022-06-06T00:00:00-05:00'},
{'status':'inactive', 'categories': [ {'tax_category_code':'T001', 'priority': 0, 'percentage': 0.05}, {'tax_category_code':'T002', 'priority': 0, 'percentage': 0.41}, {'tax_category_code':'T003', 'priority': 0, 'percentage': 0.72} ], 'date': '2022-03-31T00:00:00-05:00'}
我尝试获取与tax_category_code匹配的所有项目的列表作为结果,考虑状态为的tax_schema:活动,并显示优先级和百分比:
[
{'item_code':'A001', 'tax_category_code':'T001', 'price': 98, {'priority': 1, 'percentage': 0.1} },
{'item_code':'A002', 'tax_category_code':'T002', 'price': 39, {'priority': 3, 'percentage': 0.5} },
{'item_code':'A003', 'tax_category_code':'T001', 'price': 77, {'priority': 1, 'percentage': 0.1}},
{'item_code':'A004', 'tax_category_code':'T003', 'price': 52, {'priority': 2, 'percentage': 0.87}}
]
我已经尝试了这个查询,但是我得到了每个项目上的所有tax_schema:
db.getCollection('items').aggregate([
{
$lookup: {
from: 'tax_schema',
localField: 'tax_category_code',
foreignField: 'categories.tax_category_code',
as: 'tax_schema',
},
},
{
$project: {
item_code: 1,
tax_category_code: 1,
price: 1,
tax_schema_category: { $arrayElemAt: ['$tax_schema.categories', 0] },
}
}
])
1条答案
按热度按时间x759pob21#
您不能直接使用
$lookup
categories.tax_category_code
,因为$lookup
会被解析为数组字段。如果数组中有任何项目符合,您就会撷取数组中的所有项目。相反,您可以在子管缐中使用$unwind
和$match
。Mongo Playground