MongoDb是否可以执行查找,但仅限于某些条件?我需要从我的MongoDb获取事件,并且只有当事件有某个用户添加了相关的赌注时 - 我想在集合中添加赌注。
首先,我使用Match运算符和$ lookup来获取与事件相关的投注,但问题是我需要定义第二个条件 - 投注的用户标识符必须与外部参数(userId)的值相同。 / p>
然后我只需要添加一个结果,而不是一个集合 - 这就是我使用$ project的原因。请帮忙。
我的代码在这里:
db.collection('events').aggregate([
{
$match: {
'isDeleted': false,
'leagueId': ObjectID(leagueId)
}
},
{
$lookup: {
from: "bets",
localField: "_id",
foreignField: "eventId",
as: "bets"
},
},
{
$project: {
_id: true,
home: true,
guest: true,
description: true,
result: true,
resultHome: true,
resultGuest: true,
startDate: true,
type: true,
specialPoints: true,
leagueStage: true,
createdDate: true,
updatedDate: true,
isDeleted: true,
isCalculated: true,
leagueId: true,
bet: { "$arrayElemAt": [ "$bets", 0 ] }
}
}
答案 0 :(得分:1)
不,你在$lookup
中没有条件。但是你可以做到以下几点。
查找后,您有一个bets
数组。您可以使用$unwind
。
这样,您可以平面表示阵列。这意味着如果您有一个包含两个数组条目的文档,那么将创建两个具有相同字段和名称的文档,只有该数组才会有所不同。
然后,您可以再次使用$match
过滤掉您想要的那个。那么除非你想修改你的文件,否则你不需要使用$project
。
所以你的聚合管道看起来像这样:
db.getCollection('events').aggregate([{
$match: {
'isDeleted': false,
'leagueId': ObjectID(leagueId)
}
},
{
$lookup: {
from: "bets",
localField: "_id",
foreignField: "eventId",
as: "bets"
},
},
{
$unwind: "$bets"
},
{
// match here again to only get the bet you need
}
])
希望它有所帮助。