Удаление определенных элементов из массива с помощью MongoDB - PullRequest
35 голосов
/ 29 января 2012

Я занимаюсь разработкой веб-приложения с использованием Codeigniter и MongoDB.Пользователи могут загружать файлы, а другие пользователи могут комментировать их.

Я храню комментарии в массиве, называемом комментариями, в основном файле документа.Это все хорошо, но как я могу удалить определенные комментарии из массива?

Я не могу использовать идентификатор в качестве ключа, так как пользователь может добавить несколько комментариев.Как бы вы посоветовали мне это сделать?

Это мой массив комментариев:

"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"
        }
    ],

Ответы [ 3 ]

58 голосов
/ 29 января 2012

Если вы можете идентифицировать элемент комментария, сопоставив идентификатор пользователя, имя или комментарий, то вы можете удалить этот комментарий, используя команду 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>}}} )
3 голосов
/ 17 февраля 2014

возможно, вы можете удалить комментарий по времени 'created_at', поскольку время уникально.

$db.coll.update({cond to identify document},{$pull:{'comments':{'created_at':<>}}})
0 голосов
/ 13 августа 2017

Я думаю, вы добавляете mongodb id к каждому комментарию, когда вставляете его. Вы можете создать новый идентификатор mongodb, как этот;

$comment_id = new MongoID();

Теперь вы можете удалять комментарии по идентификатору с помощью $ pull + $ update, как ответ @ smoorthy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...