0

我想找到一个 Id=A 的文档,然后排序并获取文档 A 中的子文档。但我找不到任何解决方案,尤其是在 c# 的 MongoDB.Driver 中。在文档级别,我们有这样的查询:

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
    }
]}
4

1 回答 1

0

我找到了解决方案。我们可以在 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();
于 2020-11-29T08:32:10.973 回答