如何在节点js中传递输入参数以加入集合?

时间:2016-09-20 04:31:59

标签: node.js mongodb express

我的请求收集,

{ 
  "_id" : ObjectId("57e0b8cd5eeba5140b270ca8"), 
  "sent_id" : "57dfcdc21ad7cf658860926d", 
  "recieved_id" : "57dfcddf1ad7cf658860926e", 
  "status" : 1 
}

我的个人资料集

 { 
   "_id" : ObjectId("57dfcddf1ad7cf658860926e"), 
   "firstname" : "John", 
   "lastname" : "David", 
   "profilename" : "John David", 
   "email" : "john@gmail.com"
  }

这里我想加入带有sent_id(collection)= _id(个人资料)的集合,我尝试了下面的代码,

exports.getrequestsdetails = function (req, res) {
    var params = req.params;console.log(params)
    var record = db.collection('requests');
    var item = {"sent_id": params.id,"status":1};
  record.aggregate([
    {
      $lookup:
        {
          from: "profile",
          localField: "sent_id",
          foreignField: "_id",
          as: "profilename"
        }
   }
]).toArray((err, result) => {
   if (err){ return 
    }
      if(result){
            response = {status:'success',data:result};
        } else{
            response = {status:'fail',data:[]};
        }
      res.send(response);
  });

};

这是我的结果,我无法看到集合已加入,

    {
  "status": "success",
  "data": [
    {
      "_id": "57dfeb279559c37854adb92f",
      "profilename": []
    },
    {
      "_id": "57e0b8cd5eeba5140b270ca8",
      "sent_id": "57dfcdc21ad7cf658860926d",
      "recieved_id": "57dfcddf1ad7cf658860926e",
      "status": 1,
      "profilename": []
    }
  ]
}

使用上面的代码我遇到了两个问题,

1)我正在比较sent_id和_id,这里_id是一个对象类型,所以如何比较它们。

2)我想将发送的id作为params传递,我该怎么做?

任何人都可以建议我帮忙,因为我是node和mongo.Thanks的新手。

1 个答案:

答案 0 :(得分:0)

  1. John的ID为57dfcddf1ad7cf658860926_e_,不等于request.sent_id 57dfcdc21ad7cf658860926_d_。因此没有加入。

  2. 您需要在aggregate()调用中添加$match子句

    $ match:{sent_id:params.id}