我想根据用户提供的特定匹配 id 连接来自两个集合的文档。
用户集合的结构如下:
{
"_id" : ObjectId("58946773ab022b192814b586"),
"name" : "Josef Rakicj",
"uId" : "1485936031178",
"email" : "[email protected]",
"type" : "Dealer",
"__v" : 0
}
广告集合的结构如下:
{
"_id" : ObjectId("58bfe1a6e809982168458a5e"),
"adId" : "1488970150316",
"uId" : "1485936031178",
"title" : "Sorry, free.facebook.com isn't available in your country right now",
"type" : "0",
"__v" : 0
}
因此,我尝试使用以下代码$lookup
通过 perform 在两个集合中执行$match
。
router.get('/ad-details/:adId', function(req,res,next){
var paramid=JSON.stringify(req.params.adId);
Adpost.aggregate(
{$match:{adId:paramid}},
{ $lookup:
{
from: "users",
localField: "uId",
foreignField: "uId",
as: "postby "
}
},function(err,data){
if(err){res.json(err)}
else{
res.json(data)
console.log(data)
}
})
});
以上聚合在Mongo Shell
. 但是当我在 Node.js 中应用这个查询时,它不起作用并发送空数据。
请让我知道究竟是什么错误。
聚合查询必须是一个数组,只需将您的查询放入一个数组中
router.get('/ad-details/:adId', function(req,res,next){
Adpost.aggregate([{$match:{adId:req.params.adId}},{ $lookup: { from: "users",localField: "uId", foreignField: "uId", as: "postby "}}],function(err,data){
if(err){res.json(err)}
else{
res.json(data)
console.log(data)
}
})
});
而且您不需要对请求参数进行分类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句