$lookup 在 Node.js 中无法使用 $match

$lookup is not working with $match in Node.js

我想根据用户给出的特定匹配 ID 加入来自两个集合的文档。

用户集合的结构如下:

{
  "_id" : ObjectId("58946773ab022b192814b586"), 
  "name" : "Josef Rakicj", 
  "uId" : "1485936031178", 
  "email" : "xxx@gmail.com", 
  "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
}

因此,我尝试使用下面的代码通过执行 $match 在两个集合中执行 $lookup

 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)
            }
    })
 }); 

而且您不需要将请求参数字符串化。