Найдите, где 2 id присутствуют в Mon goose Array - PullRequest
2 голосов
/ 02 августа 2020

Я пытаюсь создать промежуточное ПО, которое будет проверять, существует ли диалог между двумя пользователями в базе данных, поэтому, если его не существует, он создаст новый диалог. Я пытаюсь использовать moon goose $in с 2 идентификаторами пользователей, но он возвращает любой разговор, в который включен любой из идентификаторов, и мне нужно получить только разговоры, идентификаторы которых вместе включены в массив пользователей.

Chat.findOne({
   users: {
    $in: [
      mongoose.Types.ObjectId(MYUSER),
      mongoose.Types.ObjectId(OTHERID2),
    ],
  },
})

Итак, давайте предположим, что "MYUSER" разговаривает с "RANDOMID", а затем я начинаю новый разговор с "OTHERID2", mon goose обнаруживает, что "MYUSER" уже начал разговор, но он не проверяет, идет ли разговор между двумя пользователями.

Схема чата

  const chatSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    lastMessage: { type: String },
    updatedOn: { type: Date, default: Date.now },
    users: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
  });

1 Ответ

2 голосов
/ 02 августа 2020

Вам необходимо заменить $in на $ all , которое возвращает истину, только если все указанные значения содержатся в массиве:

Chat.findOne({
    users: {
        $all: [
            mongoose.Types.ObjectId(MYUSER),
            mongoose.Types.ObjectId(OTHERID2),
        ],
    },
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...