如何将$ 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添加时,它与反馈文档而不是注册文档匹配。