如何在mongo db 3.2
中获取连接全部外部记录库存收集
db.inventory.insert([
{ "_id" : 1, "coin_id" : "12345", description: "product 1"},
{ "_id" : 2, "coin_id" : "12346", description: "product 2"},
])
订单收集
db.orders.insert([
{ "_id" : 1, "coin_id" : "12345", "user_id" : 11, "bal" :1000 },
])
这里的场景就是这样。我想基于coin_id从库存集合中获取reocrd,然后从订单集合中匹配记录。但如果订单收集不匹配,则至少会提供库存记录。
我的代码 - :
db.inventory.aggregate([
{
$lookup:
{
from: 'orders',
localField: 'coin_id',
foreignField: 'coin_id',
as: 'coin_details'
}
}, {$match : {'coin_details.user_id':'11')}}
每当user_id为空或不可用时,我总是希望记录库存记录 如果有其他可能性,请告诉我。请指导我怎么做。
答案 0 :(得分:2)
应更改$match
条件以满足“匹配用户ID或无匹配订单”的要求:
db.inventory.aggregate([
{
$lookup:
{
from: 'orders',
localField: 'coin_id',
foreignField: 'coin_id',
as: 'coin_details'
}
},
{ $match : {$or: [
{'coin_details.user_id':11},
{'coin_details':{$size:0}}
] } }
] )
作为旁注,user_id是示例文档中的数字,因此它应该在查询中。
答案 1 :(得分:0)
删除$match
管道,如果找不到匹配项,它将返回带有空数组的库存文档
db.inventory.aggregate([
{
$lookup:
{
from: 'orders',
localField: 'coin_id',
foreignField: 'coin_id',
as: 'coin_details'
}
}
])