簡體   English   中英

如何在mongodb中使用aggregrate和$ lookup在第二個集合上應用條件

[英]How to apply condition on second collection using aggregrate and $lookup in mongodb

我完全受MEAN Js的一個條件困擾。 我在下面寫了我的代碼:

apiRouter.post('/findhospitalbyname', function(req, res) {

    Hospital.aggregate([
    {
        "$match":{
        title: { '$regex': '.*' + req.body.name + '.*', $options: 'i' }
        }
    },
    {   
        "$lookup": {  
            "localField": "_id",   
            "from": "favorites",         
            "foreignField": "hospital_id", 
       // "pipeline": [{ 
       //    "$match": {"user_id": mongoose.Types.ObjectId(req.body.user_id)}
       //  }],
            "as": "datafind"  
        } 
  } 
],   
function(err, hospital) {
            if (err) {
                return res.send({ 'user_data': err, 'error': 1 });
            }
            if (hospital.length != 0) {
                return res.send({ 'data': hospital, 'error':0});
            } else {
                return res.send({ 'data': '', 'error':2, 'msg': 'No data found' });
            }
        })   
});

這是我的代碼。 在這里,醫院是我的第一個收藏品,我最喜歡的是我的第二個收藏品。 我想在第二個集合上添加一個條件。 對於第一個集合,我的代碼運行正常,但對於第二個集合卻不起作用。 也有一些注釋行顯示了我的第二個收藏集的狀況。 如果您有任何解決方案,請回復。

我將嘗試使用展開,比賽,小組賽階段來獲得所需的結果:

Hospital.aggregate([
{
    "$match":{
       title: { '$regex': '.*' + req.body.name + '.*', $options: 'i' }
    }
},
{   
    "$lookup": {  
        "from": "favorites",  
        "localField": "_id",        
        "foreignField": "hospital_id", 
        "as": "datafind"  
        } 
  },
  {
    "$unwind" : "$datafind"
  },
  { 
   "$match": {"$datafind.user_id": mongoose.Types.ObjectId(req.body.user_id)}
  },
  {
      $group: 
          {
              _id : "$_id" 
          }
  } 
],//the other code...

如果要首先使用管道,則需要知道mongo數據庫的版本,管道僅適用於v3.6 +,而上述代碼適用於v3.2 +。 因此,是的,mongo引入了有用的查找條件,但仍保留在您的數據庫版本中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM