[英]Getting collection depending on the second collection condition. in MongoDB
[英]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.