gpt4 book ai didi

c# - 使用 C# 驱动程序的 MongoDB 更新数组

转载 作者:可可西里 更新时间:2023-11-01 10:09:02 25 4
gpt4 key购买 nike

使用 MongoDB,如何使用 C# 驱动程序更新文档中的单个数组元素。

请允许我进行设置。假设有一个名为“Things”的集合。在 Things 集合中,有许多文档。这里有两个“东西”文档:

{
"_id":"2d7fcf21-34b8-4537-b07f-01659d87eda4",
"Name":"Something",
"Stuff":[
{
"Id":"1fdd098c-5e60-4dd8-a6a6-96b26cd90dc9",
"Completed":false
},
{
"Id":"b63cc911-a577-4744-bb0f-b9d9deabcf66",
"Completed":false
}
]
}


{
"_id":"d4ba4420-238f-4e11-9ad8-721dc3eb0ad7
",
"Name":"Another Thing",
"Stuff":[
{
"Id":"f2d46144-15eb-4451-851a-cba80dd8949b",
"Completed":false
},
{
"Id":"f2d46144-15eb-4451-851a-cba80dd8949b",
"Completed":false
}
]
}

如果我有文档的 _id 和数组中要更改的项目的 Id,如何在不替换整个文档或数组的情况下将“已完成”属性从 false 切换为 true?

我在这里显示的数据不是我正在处理的应用程序的实际数据,它是为这个例子设计的。此外,我正在使用 C# MongoDB 驱动程序 v2.7.2,我的数据库在 Atlas 上的 MongoDB v4 上运行。

最佳答案

要更新嵌套数组中的单个项目,您需要使用 $ positional operator这需要额外的过滤器来表示对嵌套数组的过滤。该过滤器可以使用 C# 中的 ElemMatch 表示。然后要引用匹配的子文档,您可以将 -1 传递给嵌套数组的索引器。尝试:

var documentId = "2d7fcf21-34b8-4537-b07f-01659d87eda4";
var stuffId = "1fdd098c-5e60-4dd8-a6a6-96b26cd90dc9";

var filter = Builders<YourModel>.Filter.And(Builders<YourModel>.Filter.Eq(x => x._id, documentId),
Builders<YourModel>.Filter.ElemMatch(x => x.Stuff, f => f.Id == stuffId));

var update = Builders<YourModel>.Update.Set(model => model.Stuff[-1].Completed, true);

Col.UpdateOne(filter, update);

关于c# - 使用 C# 驱动程序的 MongoDB 更新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53345060/

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