我完全陷入了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' });
}
})
});
这是我的代码。这里医院是我的第一个系列,最喜欢的是我的第二个系列。我想在第二次收集时添加一个条件。对于第一次收集我的代码工作正常,但它不适用于第二个集合。还有一些注释行显示我的第二个集合条件。如果您有任何解决方案,请回复。
答案 0 :(得分:0)
我将尝试使用展开,匹配,小组阶段来获得您需要的结果:
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介绍和有用的条件查找,但仍保留在您的数据库版本。