gpt4 book ai didi

codeigniter - 使用 MongoDB 进行多个原子更新?

转载 作者:可可西里 更新时间:2023-11-01 10:44:47 24 4
gpt4 key购买 nike

我正在使用 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"
}

感谢所有帮助!

最佳答案

我不熟悉 codeignitor,但是 mb mongodb shell 语法可以帮助你:

db.comments.update( {"Fullname":"Andrew Orsich"}, 
{ $set : { Fullname: "New name"} }, false, true )

最后一个 true 标志表示您要更新多个文档。因此可以在一次更新操作中更新所有评论。

顺便说一句:mongodb 和 nosql 中的非规范化(不是“硬编码”)数据通常是常规操作。此外,需要更新大量文档的操作通常是异步进行的。但这取决于您。

更新:

db.comments.update( {"comments.Fullname":"Andrew Orsich"}, 
{ $set : { comments.$.Fullname: "New name"} }, false, true )

但是,上面的查询将更新嵌套数组的第一个评论中的全名。如果您需要影响对多个数组元素的更改,您将需要使用多个更新语句。

关于codeigniter - 使用 MongoDB 进行多个原子更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7819996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com