我有三个收藏夹:Players,Matchs和MatchPlayers。 matchPlayer中的每个文档都有一个playerId和matchId属性,分别引用Players和Matches集合。给定一个playerId,我想找到该玩家的所有匹配项,其中matchId(在填充后)符合某些查询的条件。而且Matches Schema不包含播放器,因此我必须使用MatchPlayer Schema进行查找。 所有在那里的模式
const playerSchema = new mongoose.Schema({
id: String,
email: String,
firstName: String,
lastName: String,
});
const matchSchema = new mongoose.Schema({
id: String,
name: String,
activatedAt: {
type: Date,
default: null
},
startedAt: {
type: Date,
default: null
},
endedAt: {
type: Date,
default: null
}
});
const matchPlayerSchema = mongoose.Schema({
playerId: {
type: mongoose.Schema.Types.ObjectId,
ref: "Players"
},
matchId: {
type: mongoose.Schema.Types.ObjectId,
ref: "Matches"
}
});
我想找到ActivateAt为!null的玩家的所有比赛。 这是我尝试过的。
let matches = await MatchPlayer.paginate(
{
playerId: player._id
},
{
page,
limit,
populate :
{
path: "matchId",
model: "Matches"
match: {
activatedAt: { $ne: null }
}
}
}
)
上面的查询将返回该玩家的所有比赛,而与match的activateAt属性无关,并且仅填充ActivateAt为!null的那些matchId。我知道这是由于我传入了match对象。这是mongoose-paginate npm模块link。 另外,我删除了无关的代码,以避免不必要的细节,如果您需要更多,请在评论中告诉我。任何帮助将不胜感激。预先感谢!