c# - MongoDb:使用 $divide 和 $gte 的问题
问题描述
我是 MongoDb 的新手。我有问题当我使用$divide
和$gte
下面的代码时不要给我错误。但它的过滤器不起作用。
代码 :
var filter1 = new BsonDocument()
{
{"expr",
new BsonDocument(){
{
"$gte", new BsonArray{
new BsonDocument{
{
"$divide", new BsonArray{"$nA", "$wT"}
},
},
sPacketMSItem.FromDPC.Value
}
}
}
}
};
如果有人要求比告诉我更多的信息。
例外 :
{MongoDB.Driver.MongoCommandException:命令查找失败:未知顶级运算符:$expr。在 MongoDB.Driver.Core.WireProtocol.CommandWireProtocol
1.ProcessReply(ConnectionId connectionId, ReplyMessage
1 回复) 在 MongoDB.Driver.Core.WireProtocol.CommandWireProtocol1.ExecuteAsync(IConnection connection, CancellationToken cancellationToken) at MongoDB.Driver.Core.Servers.Server.ServerChannel.ExecuteProtocolAsync[TResult](IWireProtocol
1 协议,CancellationToken cancelToken) 在 MongoDB.Driver.Core.Operations.CommandOperationBase1.ExecuteProtocolAsync(IChannelSource channelSource, ICoreSessionHandle session, ReadPreference readPreference, CancellationToken cancellationToken) at MongoDB.Driver.Core.Operations.ReadCommandOperation
1.ExecuteAsync(IReadBinding binding, CancellationToken cancelToken) 在MongoDB.Driver.Core.Operations.FindCommandOperation1.ExecuteAsync(IReadBinding binding, CancellationToken cancellationToken) at MongoDB.Driver.Core.Operations.FindOperation
1.ExecuteAsync(IReadBinding binding, CancellationToken cancelToken) at MongoDB.Driver.OperationExecutor.ExecuteReadOperationAsync[TResult](IReadBinding binding, IReadOperation1 operation, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionImpl
1.ExecuteReadOperationAsync[TResult](IClientSessionHandle session, IReadOperation1 operation, ReadPreference readPreference, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionImpl
1.在 /Users/lalitdevani/Documents/AasthaSalesWebApi/Aastha/_git/Sales.WebApi/ 中的 Biz.DAL.MongoRepositoriesCustom.SalesCRMRepository.MarketSheet.MarketSheetRepository.SearchBySearchPacketMSItemAsync(SearchPacketMSItem sPacketMSItem) 使用ImplicitSessionAsync[TResult](Func2 funcAsync, CancellationToken cancellationToken) at MongoDB.Driver.IAsyncCursorSourceExtensions.ToListAsync[TDocument](IAsyncCursorSource
1 source, CancellationToken cancelToken) Biz.DAL/MongoRepositoriesCustom/SalesCRMRepository/MarketSheet/MarketSheetRepository.cs:line 142}
任何帮助将不胜感激。
解决方案
$expr是一个评估查询运算符,所以它应该以美元符号为前缀,试试:
var filter1 = new BsonDocument()
{
{"$expr",
new BsonDocument(){
{
"$gte", new BsonArray{
new BsonDocument{
{
"$divide", new BsonArray{"$nA", "$wT"}
},
},
sPacketMSItem.FromDPC.Value
}
}
}
}
};
编辑:$expr
在 MongoDB 3.6 或更高版本中可用,作为后备,您可以使用$redact,尝试:
var redact = new BsonDocument()
{
{"$redact",
new BsonDocument
{
{
"$cond", new BsonDocument(){
{
"if", new BsonDocument()
{
{ "$gte", new BsonArray
{
new BsonDocument{
{
"$divide", new BsonArray{"$nA", "$wT"}
},
},
sPacketMSItem.FromDPC.Value
}
}
}
},
{ "then", "$$KEEP" },
{ "else", "$$PRUNE" }
}
}
}
}
};
var result = Col.Aggregate()
.AppendStage<BsonDocument>(redact).ToList();
推荐阅读
- java - java 8超时后如何杀死异步运行的线程以及这样做的含义
- python - Matlab 在 Python 中的 imgaussfilt 等价物
- mysql - 使用触发器从一个表中提取 id 并映射到 MySQL 中的另一个表
- android - 将 RelativeLayout 保存为位图
- python - Python Pandas how to update a column if another column contains a certain string
- c++ - 大多数 linux 系统头文件 C++ 是否兼容?
- laravel - 使用 laravel 背包从表中导出所有数据
- c# - 映射到 SQL Server 列时,如何在 EF Core 3.0 中设置 OwnsOne 属性?
- random - Polkadot 的 VRF 如何实现随机性来洗牌验证者?
- ruby - 忽略文件 Ruby 中的 Lorem Ipsum 文本