【问题标题】:MongoDB C# 2.0 Driver Query Where Field A is Less Than Field BMongoDB C# 2.0 驱动程序查询字段 A 小于字段 B
【发布时间】:2015-06-27 03:58:27
【问题描述】:

我正在使用 C# 2.0 MongoDB 驱动程序。

我正在尝试查找字段 A 小于字段 B 的所有文档。

我试过了:

var filter = Builders<Stock>.Filter.Where(s => s.LastPrice < s.MosPrice);
var result = await _collection.Find(filter).ToListAsync();
return result;

但我收到以下错误:

System.ArgumentException 不支持的过滤器:(Serialization(LastPrice)

如何使用新的 C# MongoDB 驱动程序执行此查询?

【问题讨论】:

    标签: c# mongodb


    【解决方案1】:

    为了解决这种类型的查询,我使用BsonJavaScript

    使用老司机

    var filter = Query.Where(new BsonJavaScript("this.LastPrice < this.MosPrice"));
    

    使用新驱动程序

    var filter = new BsonDocument(new BsonDocument("$where", new BsonJavaScript("this.LastPrice < this.MosPrice")));
    

    【讨论】:

      【解决方案2】:

      出现问题是因为您尝试通过非恒定值过滤的条件。 Mongo db驱动不支持这种情况。

      【讨论】:

      • 那么我有什么选择?我还能如何执行此查询?有什么选择吗?
      【解决方案3】:

      看来你根本做不到:

      “您查询的问题是 MongoDB 不允许将两个字段相互比较。您只能将字段与常量进行比较。由于此限制,我们无法转换查询。这根本不是有效的 MongoDB 语法。

      我将按照 Works as designed 关闭这张票。”

      https://jira.mongodb.org/browse/CSHARP-1592

      【讨论】:

      • 确实有可能,所以不知道为什么关闭了。请参阅 Michal 的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多