【问题标题】:MongoDB C# - Update property of specific object in arrayMongoDB C# - 更新数组中特定对象的属性
【发布时间】:2017-08-31 17:56:39
【问题描述】:

我正在尝试更新文档中数组中特定对象的属性。

例如:

{
    _id: #####
    Items: [
        { Key: 1, Value: "Something" },
        { Key: 2, Value: "Foo" },
        { Key: 1, Value: "Bar" },
    ]
}

我正在使用 MongoDB C# 2.0 驱动程序,这就是我的过滤器(尽管我很确定这将匹配整个文档,而不是子文档)。

FilterDefinition<GroupDto> filter = Builders<GroupDto>.Filter.Eq(i => i.Id, groupId) &
       Builders<GroupDto>.Filter.ElemMatch(i => i.Items, u => u.Key == key);

实际上,我想要实现的是按 Id 匹配文档,然后在 Items 数组中找到“Key”匹配的对象,然后仅更新该特定数组对象的“Value”属性。所以我匹配 Key: 2,我可以只更新 Key: 2 的“Value”字段,并且 Key: 1 和 Key: 3 保持不变。

这可能吗?

干杯, 贾斯汀

【问题讨论】:

标签: c# arrays mongodb


【解决方案1】:

实际上,在阅读发布的问题后,它并不完全重复。在另一个问题的示例中,整个子文档被替换,因为我只想更新一个字段。

所以我在 MongoDB CSHARP 驱动程序的 Jira 票证中找到了答案:https://jira.mongodb.org/browse/CSHARP-531

您可以在索引器中使用 -1 来指定使用位置运算符。

从票:

这仅适用于 2.0.0 中的新 API。 -1 可用作索引器或与 GetElementAt 一起指示我们使用位置运算符。例如:

Builders<Entity>.Update.Set(x => x.MyArray[-1].Value, 10);
// will yield {$set: { "MyArray.$.Value", 10 } }

干杯, 贾斯汀

【讨论】:

    猜你喜欢
    • 2020-02-03
    • 2018-08-23
    • 1970-01-01
    • 2021-11-12
    • 2020-03-29
    • 2020-12-18
    • 2015-07-10
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多