我正在尝试解决一个问题,我试图通过对Matches.ShippingCharge + Matches.PreownedPrice = Total进行$ add来计算总成本。
如果Matches.ShippingCharge只是$ ShippingCharge我可以轻松完成,但由于我从2个集合中提取数据,所以方法似乎有所不同,我不知道该怎么做。
gameresult = db.products.aggregate([
{'$match': {'Platform':variable}},
{'$lookup':{'from': 'vendorgames','localField': 'Product','foreignField': 'Product','as': 'Matches'}},
{'$project': {'_id':0,'Product':'$Product','Price':'$Price','Matches.ShippingCharge':1,'Matches.PreownedPrice':1}}])
当我运行上述查询时,我的结果如此:
{u'Matches': [{u'ShippingCharge': 200, u'PreownedPrice': 2000}], u'Product': u'A Way Out', u'Price': u'2,499.00'}
我想要的是具有$ add函数的Matches.ShippingCharge + Matches.PreownedPrice的总和,其中结果将是新的总字段。所以我的输出应该是这样的:
{u'Matches': [{u'ShippingCharge': 200, u'PreownedPrice': 2000, u'Total': 2200 }], u'Product': u'A Way Out', u'Price': u'2,499.00'}
答案 0 :(得分:1)
您需要使用$add aggregation
聚合来添加ShippingCharge
和PreownedPrice
字段
gameresult = db.products.aggregate([
{'$match': {'Platform':variable}},
{'$lookup':{'from': 'vendorgames','localField': 'Product','foreignField': 'Product','as': 'Matches'}},
{'$project': {'_id':0,
'Product':'$Product',
'Price':'$Price',
'Matches.ShippingCharge':1,
'Matches.PreownedPrice':1,
'total': { $add: [ "$Matches.ShippingCharge", "$Matches.PreownedPrice" ] } }}
])