首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用POCO类的mongodb graphLookup c#示例

使用POCO类的mongodb graphLookup c#示例
EN

Stack Overflow用户
提问于 2021-04-14 19:11:02
回答 1查看 182关注 0票数 1

有没有可能对POCO类而不是bson文档使用graphLookup aggregate stage?我找到的所有例子都在使用BsonDocuments,这让我很困惑。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-15 16:09:22

让我们以想要获取库中给定类别的面包屑结果的示例场景为例……

下面是一个完整的程序,它插入一些种子数据,并使用图形查找聚合阶段来获取Mindfulness类别的面包屑:

注意:为了简单起见,我使用了MongoDB.Entities库。对于官方驱动程序,聚合查询将是相同的。

代码语言:javascript
复制
using MongoDB.Driver;
using MongoDB.Entities;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace TestApplication
{
    public class Category : Entity
    {
        public string Name { get; set; }
        public string ParentCategory { get; set; }
    }

    public class Result
    {
        public string[] BreadCrumb { get; set; }
    }

    public static class Program
    {
        private static async Task Main()
        {
            await DB.InitAsync("test");

            await new[] {
                new Category { Name = "Books" },

                new Category { Name = "Sci-Fi", ParentCategory = "Books" },
                new Category { Name = "Space", ParentCategory = "Sci-Fi" },
                new Category { Name = "AI", ParentCategory = "Sci-Fi" },

                new Category { Name = "Self-Help", ParentCategory = "Books" },
                new Category { Name = "Mindfulness", ParentCategory = "Self-Help" },
                new Category { Name = "Hypnotherapy", ParentCategory = "Self-Help" }
            }.SaveAsync();

            var collection = DB.Collection<Category>();

            var result = await collection.Aggregate()
                .Match(c => c.Name == "Mindfulness")
                .GraphLookup<Category, string, string, string, Category, IEnumerable<Category>, object>(
                    from: collection,
                    connectFromField: nameof(Category.ParentCategory),
                    connectToField: nameof(Category.Name),
                    startWith: $"${nameof(Category.Name)}",
                    @as: "BreadCrumb",
                    depthField: "order")
                .Unwind("BreadCrumb")
                .SortByDescending(x => x["BreadCrumb.order"])
                .Group("{_id:null, BreadCrumb:{$push:'$BreadCrumb'}}")
                .Project("{_id:0, BreadCrumb:'$BreadCrumb.Name'}")
                .As<Result>()
                .ToListAsync();

            var output = string.Join(" > ", result[0].BreadCrumb);

            Console.WriteLine(output); //Books > Self-Help > Mindfulness
            Console.ReadLine();
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67090587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档