从查询中匹配填充子文档的集合中查找所有文档

时间:2019-06-19 16:35:08

标签: javascript mongodb mongoose mongoose-populate

我有三个收藏夹: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。 另外,我删除了无关的代码,以避免不必要的细节,如果您需要更多,请在评论中告诉我。任何帮助将不胜感激。预先感谢!

0 个答案:

没有答案