Mongoose使用$and, $or和$and进行查询



我的查询在Mongoose中是这样的

matchRecord = await MatchRegister.findOne({
$and: [
{ $or: [{$and:[{"Player1Name": slot1SaturdayArray[i]},{"Player2Name": slot1SaturdayArray[j]}]}],
[{$and:[{"Player1Name": slot1SaturdayArray[j]},{"Player2Name": slot1SaturdayArray[i]}]}]},
{ TournamentName: activeTournamentRecord.TournamentName},
{ MatchCompleted: {$eq: undefined}}
]
}).exec()

但是这个消息总是失败

[{$and:[{"Player1Name": slot1SaturdayArray[j]},{"Player2Name": slot1SaturdayArray[i]}]}]},
                                     ^
SyntaxError: Unexpected token '}'

这就是我想要达到的目标

select * from MatchRegister where TournamentName = 'gsm edition 6' and matchcompleted = 'yes' and (Player1Name='playername' and Player2Name='playername') or (Player1Name = 'playername' and player2name='playername')
有谁能给我指路吗?我已经尝试了很多其他的选项,只是粘贴了我最近尝试的一个。

是,有一个意外的标记。

matchRecord = await MatchRegister.findOne({
$and: [{
$or: [{
$and: [{
"Player1Name": slot1SaturdayArray[i]
}, {
"Player2Name": slot1SaturdayArray[j]
}]
},
{
$and: [{
"Player1Name": slot1SaturdayArray[j]
}, {
"Player2Name": slot1SaturdayArray[i]
}]
}]
},
{
TournamentName: activeTournamentRecord.TournamentName
},
{
MatchCompleted: {
$eq: undefined
}
}
]
}).exec()

尝试缩进代码,以便在阅读时理解它。

这个成功了。我相信你的也是一样的。

matchRecord = await MatchRegister.findOne({
$and: [{
TournamentName: activeTournamentRecord.TournamentName
}],
$and: [{
MatchCompleted: { $eq: undefined}
}],
$and: [{$or:[{$and: [{Player1Name: slot1SaturdayArray[i]},{Player2Name: slot1SaturdayArray[j]}]},
{$and: [{Player1Name: slot1SaturdayArray[j]},{Player2Name: slot1SaturdayArray[i]}]}
]}]
}).exec()

最新更新