【发布时间】:2018-01-31 16:36:04
【问题描述】:
我完全被 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' });
}
})
});
这是我的代码。这里的医院是我的第一个系列,最喜欢的是我的第二个系列。我想在第二个集合上添加一个条件。对于第一个集合,我的代码运行良好,但不适用于第二个集合。还有一些注释行也显示了我的第二个集合的条件。如果您有任何解决方案,请回复。
【问题讨论】:
-
条件查找中没有
localField和foreignField。检查docs.mongodb.com/manual/reference/operator/aggregation/lookup/…的语法。 -
您不需要使用查找的管道变体。在 $lookup 之后添加 $unwind & $match 以在第二个集合上应用标准。类似
{ "$lookup": { "localField": "_id", "from": "favorites", "foreignField": "hospital_id", "as": "datafind" } } , {"$unwind":"$datafind"}, {"$match":{"datafind.user_id":mongoose.Types.ObjectId(req.body.user_id)}}
标签: javascript mongodb aggregation-framework mean-stack