如何在 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 从库存集合中获取记录,然后从订单集合中匹配记录。但如果订单收款时不匹配,至少会给出库存记录。
我的代码-:
db.inventory.aggregate([
{
$lookup:
{
from: 'orders',
localField: 'coin_id',
foreignField: 'coin_id',
as: 'coin_details'
}
}, {$match : {'coin_details.user_id':'11')}}
每当 user_id 为空或不可用时,我总是希望从库存记录中进行记录 如果有任何其他可能性,请告诉我。请指导我该怎么做。
最佳答案
应更改 $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 是示例文档中的一个数字,因此它应该出现在查询中。
关于node.js - mongodb如何加入集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48260183/