Подтвердить что ты не робот

Удаление определенных элементов из массива с помощью 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"
        }
    ],
4b9b3361

Ответ 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.