#node.js #mongodb #express #mongoose #web-development-server
#node.js #mongodb #экспресс #mongoose #веб-разработка-сервер
Вопрос:
В MongoDB (через mongoose) я пытаюсь удалить элемент из массива коллекции и использую для этого оператор $pull, но он не работает.
Сбор номеров в MongoDB
{
"_id":"sampleObjectId",
"users": ["email1@example.com", "email2@example.com"]
}
Внутренний код для удаления пользователя (mongoose с помощью Node.js )
Rooms.update(
{ _id: "sampleRoomId" },
{
$pull: {
users: "email1@exmple.com" }
},
}
)
При выполнении этого кода происходит изменение коллекции, никаких изменений не происходит. код выполняется без ошибок, и на выходе он говорит "nModified":0
.
Я понятия не имею, как удалить пользователя из коллекции.
Комментарии:
1. mongoplayground.net/p/f58HFvHkJcC это работает так, как вы и ожидали
2. В вашем документе обновления есть опечатка,
email1@exmple.com
вместоemail1@example.com
3. @varman пожалуйста, ознакомьтесь с этой ссылкой на код, она не работает
4. Спасибо, что указали на это, но. Я только что привел пример моего реального кода (приведенный код не является реальным), опечатка не является реальной проблемой @MontgomeryWatts. Пожалуйста, посмотрите на эту ссылку
5.
_id
это идентификатор объекта, но вы передаете значение в виде строки. Приведите его к объектному идентификатору следующим образом
Ответ №1:
//actual code output from the mongo shell. This is working as expected. check if you given //correct value in object_id query parameter.
> db.rooms.find();
{ "_id" : "sampleObjectId", "users" : [ "email1@example.com", "email2@example.com" ] }
> db.rooms.update(
... {_id: "sampleObjectId"},
... {$pull:{users:"email1@example.com"}}
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.rooms.find();
{ "_id" : "sampleObjectId", "users" : [ "email2@example.com" ] }
> db.version();
4.2.6
>