Запрос фильтра MongoDB в. net преобразование из SQL - PullRequest
1 голос
/ 13 марта 2020

Я пытаюсь преобразовать базовый c запрос из SQL в пн go, это SQL:

select top(1)* from x where(a = 5) and(b = 6) and (c = 11) order by d desc

Что у меня так далеко:

var builder = Builders<BsonDocument>.Filter;
var filter = builder.Eq("a", 5) & builder.Eq("b", 6) & builder.Eq("c", 11);
List<BsonDocument> i = getCollection("x").Find(filter).ToList();
if (i.Count > 0)
{
   id = i[0].GetElement("id").Value.ToInt32();
}
return id;

я пуст, БД содержит необходимые данные, любая помощь с благодарностью!

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Вот как я успешно получаю требуемый ответ:

var filter = "{$and : [{a : 5},{b : 6},{c : 11}]}";
SortDefinition<BsonDocument> sort = Builders<BsonDocument>.Sort.Descending("d");
List<BsonDocument> l = getCollection("x").Find(filter).Sort(sort).Limit(1).ToList();
0 голосов
/ 14 марта 2020

Я не могу перенести bsondocuments в c#, поэтому я бы создал класс для сопоставления следующим образом:

    public class Item
    {
        public int a { get; set; }
        public int b { get; set; }
        public int c { get; set; }
        public int d { get; set; }
    }

и затем выполнил бы запрос на поиск, подобный этому:

    var filter = Builders<Item>.Filter.Where(i => i.a == 5 && i.b == 6 && i.c == 11);
    var sort = Builders<Item>.Sort.Descending(i => i.d);
    var projection = Builders<Item>.Projection.Expression(i => i.id);

    var id = collection.Find(filter)
                       .Sort(sort)
                       .Limit(1)
                       .Project(projection)                               
                       .ToList()
                       .SingleOrDefault();

Вот альтернативный способ сделать это без дополнительного шума строителей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...