gpt4 book ai didi

c# - Lambda 失败但字符串有效

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

使用旧的 MongoDB 驱动程序,我能够执行以下查询:

Query.Where("this.plan.sstats.used < this.plan.sstats.available")

但是有了新的,我不得不这样写:

builder.Filter
.Where(t => t.Plan.StorageStats.UploadUsed < t.Plan.StorageStats.UploadAvailable)

这些看起来一样,但新的不起作用,我收到此错误消息:

Additional information: Unsupported filter: ({plan.sstats.used} < {plan.sstats.available}).

后端版本目前是相同的,所以我看不出有任何理由不能继续工作。

我该如何解决这个问题?有没有更好的方法来做到这一点,同时保持原子性?

最佳答案

似乎 MongoDb 驱动器不再支持它了。我个人认为有两种可能的解决方案:

1) 你查询 bson,而不是你的对象,这应该可以工作(我已经尝试使用我的示例数据):

FilterDefinition<BsonDocument> filter = 
new BsonDocument("$where", "this.plan.sstats.used<this.plan.sstats.available");

这种方法不好:您应该将您的集合查询为 BsonDocument 集合。

2) 您以 ToEnumerable() 查询您的集合,而不是将您的过滤器添加为 Where linq 语句。这也行得通,但是您直接在 mongodb 上丢失了查询数据。

3)你可以使用聚合框架,我是这样做的:

var result = collection.Aggregate()
.Group(r => r.Plan.StorageStats.UploadUsed - r.Plan.StorageStats.UploadAvailable,
r => new {r.Key, Plans= r.Select(t=>t.Plan)} )
.Match(r=>r.Key < 0)
.ToEnumerable()
.SelectMany(r=>r.Plans);

聚合的缺点是您无法将它与您在 Find() 调用中使用的其他过滤器组合。

关于c# - Lambda 失败但字符串有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41586924/

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