MongoDb: проблема с использованием $ div и $ gte - PullRequest
0 голосов
/ 26 декабря 2018

Я новичок в 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.CommandWireProtocol 1.ExecuteAsync(IConnection connection, CancellationToken cancellationToken) at MongoDB.Driver.Core.Servers.Server.ServerChannel.ExecuteProtocolAsync[TResult](IWireProtocol 1 протокол, CancellationToken cancellationToken) в MongoDB.Driver.Core.Operations.CommandOperationBase *.ExecuteAsync (привязка IReadBinding, CancellationToken cancellationToken) в MongoDB.Driver.Core.Operations.FindCommandOperation 1.ExecuteAsync(IReadBinding binding, CancellationToken cancellationToken) at MongoDB.Driver.Core.Operations.FindOperation 1.ExecuteAsync (IReadBinding привязка, CancellationToken cancellationToken) в MongoDB.Driver.OperationExoction, Операция IRectionOctionOneEadист1.ExecuteReadOperationAsync [TResult] (сеанс IClientSessionHandle, IReadOperation 1 operation, ReadPreference readPreference, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionImpl 1./Users/lalitdevani/Documents/AasthaSalesWebApi/Aastha/_git/Sales.WebApi/Biz.DAL/MongoRepositoriesCustom / SalesCRMRepository / MarketSheet / MarketSheetRepository.cs: строка 142}

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 26 декабря 2018

$ 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...