gpt4 book ai didi

c# - 如何使用 C# 驱动程序更新 MongoDB 中数组子文档中包含的数组子文档中的字段?

转载 作者:可可西里 更新时间:2023-11-01 09:57:04 27 4
gpt4 key购买 nike

我在 MongoDB 中有一个文档集合,其结构如下(有多个容器文档,每个容器文档包含 Sessions,每个 session 包含 1 个订单,每个订单包含多个项目):

{
"Sessions" : [{
"ID" : "1882a092-d395-45d1-b36b-e2fa3df81b95",
"Order" : {
"Items" : [{
"_id" : "a9c94a5e-10ef-433d-9c63-f4555eb7c2a7",
"Title" : "UPDATE THIS",
}]
}
}],
"_id" : "1b640bc4-fdb4-49b1-9c60-e4c6f1bd0405"
}

我想更新 session 中订单中给定 ItemTitle,同时知道该项目的 _id(我也如果有帮助,请知道 session 的 ID):

我尝试了以下方法:

col.Update(Query.EQ("Sessions.ID", sessionID),
Update.Set("Sessions.$.Order.Items.Title", newTitle));

col.Update(Query.EQ("Sessions.Order.Items._id", id),
Update.Set("Sessions.Order.Items.$.Title", newTitle));

两者均抛出异常WriteConcern 检测到错误'无法使用部分(Sessions of Sessions.Order.Items.0.Status)遍历元素...。我还使用 Query.And 尝试了组合查询的不同组合,这可能意义不大,不值得在这里发布。

如何使用 C# 驱动程序更新包含在文档数组中的子文档中的字段?

我意识到这不能单独使用位置运算符来完成(并且位置运算符不会神奇地匹配内部数组)。

我正在寻找开箱即用的解决方案,了解如何在不更改架构的情况下完成此类更新。

最佳答案

您没有更新子文档的子文档。您正在更新父数组子文档中数组子文档的一个字段。

你可以通过下面的代码更新first元素

col.Update(Query.EQ("Sessions.ID", sessionID),
Update.Set("Sessions.$.Order.Items.0.Title", newTitle));

使用简单的更新查询,您无法更新所有 元素的标题。此链接可能对您有帮助(使用自定义 JavaScript 更新查询)

How to multi update of a nested array in MondoDB?

关于c# - 如何使用 C# 驱动程序更新 MongoDB 中数组子文档中包含的数组子文档中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26783794/

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