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

3

我在数据库中有这个实体

{
    "_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

1个回答

1
我不知道是否有内置的方法可以使用官方驱动程序完成此操作。我编写了一个静态实用类,可以为提供的lambda表达式返回字符串路径。使用它,您可以消除硬编码的字符串,例如:
    var path = Prop.PosAll<TrackerBet>(t => t.Bets[0].IsPublic);
    var update = Builders<TrackerBet>.Update.Set(path, true);

这里有关于静态类所有方法的更多信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接