使用MongoDB从数组中删除特定项

时间:2012-01-28 20:40:16

标签: codeigniter mongodb

我正在使用Codeigniter和MongoDB开发一个Web应用程序。 用户可以上传文件,其他用户可以对其进行评论。

我将注释存储在主文件文档中名为comments的数组中。 这一切都很好,但我如何从数组中删除特定的注释?

我不能使用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"
        }
    ],

3 个答案:

答案 0 :(得分:58)

如果您可以通过匹配用户ID,名称或评论来识别评论项目,那么您可以使用带有update()修饰符的$pull命令以及相应的条件删除该评论。

如果您不能执行上述操作,请在评论中添加唯一ID(例如UUID)。

要删除评论,请执行以下操作:

db.coll.update({<cond to identify document}, {$pull: {'comments': {'name': <name>}}} )

如果使用id,则首选:

db.coll.update({<cond to identify document}, {$pull: {'comments': {'id': <id>}}} )

答案 1 :(得分:3)

也许您可以按“created_at”时间删除评论,因为时间是唯一的。

$db.coll.update({cond to identify document},{$pull:{'comments':{'created_at':<>}}})

答案 2 :(得分:0)

我认为,在插入时,你已经为每个注释添加了mongodb id。你可以像这样创建一个新的mongodb id;

$comment_id = new MongoID();

现在,您可以使用$ pull + $ update删除ID,如@ smoorthy的答案。