gpt4 book ai didi

c# - MongoDB C# 驱动程序 - 更新嵌入式文档数组中的所有字段

转载 作者:行者123 更新时间:2023-12-01 13:55:55 24 4
gpt4 key购买 nike

我在数据库中有这个实体

{
"_id" : ObjectId("XXX"),
"Bets" : [
{
"IsPublic" : false
},
{
"IsPublic" : false
}
]
}

我想更新嵌套文档中的所有文件IsPublic。我有一个完美的查询:

db.getCollection('bets').update({"_id": ObjectId("XXX")}, {$set : { "Bets.$[].IsPublic" : true }})

我想用 C# 驱动程序编写相同的查询,我更喜欢强类型查询,如下所示:

var filter = Builders<TrackerBet>.Filter.Eq(b => b.Id, "XXX");
var update = Builders<TrackerBet>.Update.Set(b => b.Bets[-1].IsPublic, true);
var result = mongoDb.Bets.UpdateOneAsync(filter, update).Result;

但它不起作用。如果我放弃强类型查询,它会起作用:

var update = Builders<TrackerBet>.Update.Set("Bets.$[].IsPublic", true); 

是否有可能实现强类型查询?我认为 b.Bets[-1].IsPublic 应该可以解决问题,但我收到错误消息 The positional operator did not find the match needed from the query

最佳答案

我不知道有任何内置方法可以使用官方驱动程序完成此操作。我写了一个static utility class返回提供的 lambda 表达式的字符串路径。有了它,您可以像这样消除硬编码字符串:

    var path = Prop.PosAll<TrackerBet>(t => t.Bets[0].IsPublic);
var update = Builders<TrackerBet>.Update.Set(path, true);

这里是 more info在静态类的所有方法上。

关于c# - MongoDB C# 驱动程序 - 更新嵌入式文档数组中的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60253631/

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