使用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删除注释。