Mon goose найти вложенный элемент в массиве и вернуть при условии соответствия - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь найти элементы во вложенном массиве и возвращать их, только если они соответствуют указанному условию c.

Сведения:

У меня есть эта модель:

var Conversation = new Schema({
  name: { type: String, unique: true, required: true},
  speakers: [{ // speakers array contain all speakers included and whether a speaker can view this conversation or not
    user: {
      type: Schema.Types.ObjectId,
      ref: 'User',
    },
    canView: { // whether to show this conversation to this user
      type: Boolean,
      default: true,
    },
  }],
};

С помощью идентификатора пользователя "5e09658ccff71014da5d4a0c" я хочу найти все разговоры, в том числе его и он может просматривать.

Сейчас я просто могу найти все разговоры, включая пользователя с:

Conversation.find({ 'speakers.user': { $all: ["5e09658ccff71014da5d4a0c"] } })

Но я не знаю, как указать условие (canView)

Кто-нибудь может помочь?

1 Ответ

1 голос
/ 13 января 2020

Вы можете сделать это с помощью $elementMatch

Примерно так:

Conversation.find({
  speakers: {
    $elemMatch: {
      user: ObjectId("5e1cb844b99aae764d59d70a"),
      canView: true
    }
  }
});
...