我正在使用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不支持的过滤器:(序列化(LastPrice) &LT;序列化(MosPrice))。
如何使用新的C#MongoDB驱动程序执行此查询?
答案 0 :(得分:3)
要解决此类查询,请使用BsonJavaScript
:
使用旧驱动程序:
var filter = Query.Where(new BsonJavaScript("this.LastPrice < this.MosPrice"));
使用新驱动程序:
var filter = new BsonDocument(new BsonDocument("$where", new BsonJavaScript("this.LastPrice < this.MosPrice")));
答案 1 :(得分:0)
出现问题因为您尝试过滤的条件不是常数值。 Mongo db驱动程序不支持这种情况。
答案 2 :(得分:0)
似乎你根本不能:
“您的查询的问题是MongoDB不允许将两个字段相互比较。您只能将字段与常量进行比较。由于此限制,我们无法转换查询。它只是无效的MongoDB语法。
我打算将这张票关闭为Works as Designed。“