我正在使用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"
}
],
答案 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的答案。