如何在mongodb中将$ match运算符与查找集合一起使用

如何将$ match与查找文档一起使用

文档-反馈

[
  {id: 1,post:'post 1',user_id:101,reply_by: 1 },{id: 2,post:'post 2',reply_by: 2 },{id: 3,post:'post 3',user_id:102,{id: 4,post:'post 4',user_id:103,reply_by: 1 }
]

文档-用户

[
 {id:1,name: 'Vicky',username:'vicky@test.com'},{id:2,name: 'Vikash',username:'vikash@test.com'},{id:3,name: 'Vishesh',username:'vishesh@test.com'}
]

文档-寄存器

[
 {id:1,name: 'User 1',username:'user1@test.com',phoneNumber: '1234567890'},name: 'User 2',username:'user2@test.com',phoneNumber: '9876543210'},name: 'User 3',username:'user3@test.com',phoneNumber: '3456234567'}
]
 getFeedbacklist(req,res) {
    const pageNo = parseInt(req.body.page_no);
    const pageSize = parseInt(req.body.page_size);
    if (req.body.filterSet !== undefined) {
      const filterData = req.body.filterSet[0];
      var start_date = filterData.start_date;
      var end_date = filterData.end_date;
      var status = filterData.status;
      var number = filterData.number;
    }
    const skip = pageSize * (pageNo - 1);
    const limit = pageSize;
    const stages = [
      { $sort : { created_at : -1 } },{ $lookup: { from: 'registers',localField: 'user_id',foreignField: 'id',as: 'sender'} },{ $replaceRoot : { newRoot : { $mergeObjects : [ { $arrayElemAt: ['$sender',0] },"$$ROOT"] } } },{ $lookup: { from: 'users',localField: 'reply_by',as: 'userDetails'} },{ $replaceRoot: { newRoot: { $mergeObjects: [ { $arrayElemAt: ['$userDetails',"$$ROOT" ] } } },{ $project: { 'sender': 0,'userDetails' : 0 } },{ $facet : { length : [ { $count : "total" }],data : [ { $skip: skip },{$limit: limit } ] } },];

    if(start_date !== 'Invalid date' && start_date !== undefined && start_date !== ''){
      stages.unshift(
        { $match : { created_at: { $gte: start_date } } }
      )
    }
    if(end_date !== 'Invalid date' && end_date !== undefined && end_date !== ''){
      stages.unshift(
        { $match : { created_at: { $lte: end_date } } }
      )
    }
    if(status != null && status != ''){
      if(status == '1' ) {
        stages.unshift(
          { $match : { reply: { $exists: true} } }
        )
      }
      if(status == '0' ) {
        stages.unshift(
          { $match : { reply: { $exists: false} } }
        )
      }
    }

    Feedback.aggregate(stages).allowDiskUse(true).then(document => {
      console.log(document);
    }).catch(error => {
      console.log(error);
      return res.status(400).json({
        status:400,message:'Something went wrong. Pleae try again'
      });
    });
  }

我的问题是如何为phoneNumber写条件,但条件是当只有phoneNumber可用时,它应该在$ match运算符中添加。 我尝试通过添加为start_date,end_date或status添加的方式进行尝试,但是当我以前为phoneNumber添加时,它与反馈文档而不是注册文档匹配。

dwtmwyc 回答:如何在mongodb中将$ match运算符与查找集合一起使用

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2995784.html

大家都在问