使用MongoDB从arrays中删除特定的项目

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

我将注释存储在主文件中的一个名为comments的数组中。 这一切都很好,但我怎么能从数组中删除特定的评论?

我不能使用ID作为键,因为用户可以添加多个注释。 你会如何build议我可以做到这一点?

这是我的评论数组:

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

如果您可以通过匹配用户标识,名称或注释来标识注释项目 – 那么您可以使用具有$pull修饰符的update()命令以及适当的条件移除该注释。

如果你不能像上面那样做,请在注释中包含一个唯一的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>}}} ) 

也许你可以删除评论的“ created_at ”时间,因为时间是独一无二的。

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

我想,你插入它时,添加mongodb id到每个评论。 你可以像这样创build一个新的mongodb id;

 $comment_id = new MongoID(); 

现在,你可以用$ pull + $ update像id @ smoorthy的答案一样用id删除注释。