如何获取MongoDB中的最后n个子文档?

How to get last n subdocument in MongoDB?

我想找一个Id=A的文档,然后排序并取出文档A里面的子文档。 但我找不到任何解决方案,尤其是在 MongoDB.Driver for 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
    }
]}

我找到了解决办法。我们可以使用 Projection 中的 Slice 函数。像这样:

            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();