Как получить последние n вложенных документов в MongoDB?

#c# #mongodb #mongodb.driver

#c# #mongodb #mongodb.driver

Вопрос:

Я хочу найти документ с Id=A, затем отсортировать и поместить вложенный документ в документ A. Но я не могу найти для этого никакого решения, особенно в MongoDB.Driver для c #. На уровне документа у нас есть такой запрос:

 db.foo.find().sort({_id:1}).limit(50);
 

Но мне нужно применить функцию ограничения для вложенных документов, а не документов.

рассмотрим эту модель в качестве примера:

 {
"_id" : "10000",
"password" : "password1",
"name" : "customer1",
"channels" : [ 
    {
        "id" : "1",
        "name" : "cust1chan1",
        "enabled" : true
    }, 
    {
        "id" : "2",
        "name" : "cust1chan2",
        "enabled" : true
    }, 
    {
        "id" : "3",
        "name" : "cust1chan2",
        "enabled" : true
    }, 
    {
        "id" : "4",
        "name" : "cust1chan2",
        "enabled" : true
    },...
]}
 

и мне нравится, чтобы мой результат был чем-то похожим на это:

 {
"_id" : "10000",
"password" : "password1",
"name" : "customer1",
"channels" : [ 
    {
        "id" : "1",
        "name" : "cust1chan1",
        "enabled" : true
    }, 
    {
        "id" : "2",
        "name" : "cust1chan2",
        "enabled" : true
    }
]}
 

Ответ №1:

Я нахожу решение. Мы могли бы использовать функцию среза в проекции. Что-то вроде этого:

             var filter = Builders<Foo>.Filter.Where(p => p.Id == fooId);
            var slice = Builders<Foo>.Projection.Slice(p => p.Channels, 0, 2);
            var sort = Builders<Foo>.Sort.Descending("Foo.Channels");
            var articleDocument = _collectionFoo.Find(filter).Sort(sort).Project<Foo>(slice).FirstOrDefault();