Удаление определенных элементов из массива с помощью MongoDB
Я разрабатываю веб-приложение с помощью Codeigniter и MongoDB.
Пользователи могут загружать файлы, а другие пользователи могут комментировать их.
Я храню комментарии в массиве с комментариями в основном файле документа.
Все в порядке, но как я могу удалить определенные комментарии из массива?
Я не могу использовать ID как ключ, так как пользователь может добавлять несколько комментариев. Как бы
вы рекомендуете мне это сделать?
Это мой массив комментариев:
"comments": [
{
"user_id": ObjectId("4f240b433dc7937d68030000"),
"user_name": "james",
"user_comment": "This is a comment",
"created_at": "2012-01-2821: 20: 44"
},
{
"user_id": ObjectId("4f240b433dc7937d68030000"),
"user_name": "mandy",
"user_comment": "This is another comment",
"created_at": "2012-01-2821: 31: 07"
}
],
Ответы
Ответ 1
Если вы можете идентифицировать элемент комментария, сопоставляя идентификатор пользователя, имя или комментарий, вы можете удалить этот комментарий, используя команду update()
с модификатором $pull
вместе с соответствующим условием.
Если вы не можете сделать так, как указано выше, включите в комментарии уникальный идентификатор (например, UUID
).
Чтобы удалить комментарий, сделайте следующее:
db.coll.update({<cond to identify document}, {$pull: {'comments': {'name': <name>}}} )
Если вы используете идентификатор, который является предпочтительным:
db.coll.update({<cond to identify document}, {$pull: {'comments': {'id': <id>}}} )
Ответ 2
возможно, вы можете удалить комментарий по времени 'created_at
', поскольку время уникальное.
$db.coll.update({cond to identify document},{$pull:{'comments':{'created_at':<>}}})
Ответ 3
Я думаю, вы добавляете id mongodb к каждому комментарию, когда вставляете его. Вы можете создать новый идентификатор mongodb, как это;
$comment_id = new MongoID();
Теперь вы можете удалять комментарии по id с помощью $pull + $update, например @smoorthy.