我正在使用Codeigniter和Alex Bilbie的MongoDB库。 在我正在开发的API中,用户可以上传图像,其他用户可以对它们进行评论。 我选择将评论作为子文档包含在图像中。
每条评论都包含:
换句话说。用户全名被“硬编码”到每个评论中,如果他们 后来决定改变他们的名字我有问题。
我读到我可以使用原子更新来更新所有出现的名称(比如在评论中),但是如何使用Alex的库来做到这一点?我可以更新名称错误的所有地方吗?
更新
这是图像文档与评论的外观。 我认为MongoDB鼓励使用子文档非常奇怪,但之后不包括更新数组中多个项目的方法。
{
"_id": ObjectId("4e9ead773dc793dc01020000"),
"description": "An image",
"category": "accident",
"comments": [
{
"id": ObjectId("4e96bd063dc7937202000000"),
"fullname": "James Bond",
"comment": "This is a comment.",
"created_at": "2011-10-19 13:02:40"
}
],
"created_at": "2011-10-19 12:59:03"
}
感谢所有人的帮助!
答案 0 :(得分:1)
我不熟悉codeignitor,但是mb mongodb shell语法会帮助你:
db.comments.update( {"Fullname":"Andrew Orsich"},
{ $set : { Fullname: "New name"} }, false, true )
最后一个真实标志表示您要更新多个文档。因此,可以在一次更新操作中更新所有注释。
BTW:mongodb和nosql中的denormalazing(非“硬编码”)数据通常是常用的操作。另外需要更新大量文档的操作通常也是异步的。但这取决于你。<强>更新强>
db.comments.update( {"comments.Fullname":"Andrew Orsich"},
{ $set : { comments.$.Fullname: "New name"} }, false, true )
但是,上面的查询将在嵌套数组的第一条评论中更新全名。如果需要影响对多个数组元素的更改,则需要使用多个更新语句。