Я пытаюсь удалить объект из массива на основе его поля _id следующим образом:
(posts — это массив объектов)
User.findOneAndUpdate(
{ id: req.params.userid },
{ $pull: { 'posts': { 'posts._id': { $eq: req.body.postID } } } },
{ new: true }
)
Однако он удаляет ВСЕ сообщения в массиве, даже если они имеют разные значения _id, на которые ссылается req.body.postID
.
Примечание. Если я попытаюсь выполнить тот же запрос с другим полем, например, с названием сообщения, он будет работать нормально и удалит только это сообщение. Однако мне нужно сделать это по полю _id, чтобы обеспечить уникальность.
Вот как выглядит модель User
:
(Я не указываю явно поле _id, оно назначается автоматически)
let userSchema = new mongoose.Schema({
id: String,
displayName: String,
posts: [
{
url: String,
description: String,
likes: [String]
}
]
});
Почему это происходит и какое возможное решение?
User.findOneAndUpdate( { id: req.params.userid }, { $pull: { 'posts': { _id': req.body.postID } } }, { new: true } )
- person chridam   schedule 12.04.2017{ $pull: { 'posts': { 'posts._id': { $eq: req.body.postID } } } },
, который извлекает все сообщения, поскольку в массивеposts
нет документа с ключомposts._id
. Подробнее здесь а>. - person chridam   schedule 12.04.2017