带有 Group Unwind 和 Project 的 MongoDb C# 类型聚合

2023-12-02

我有一个这样的集合:

[{
  "_id": 1,
  "OtherProperties": 100
  "PersonInventory": [{
    "FirstName": "Joe",
    "MiddleName": "Bob",
    "LastName": "Blogs",
    "PersonId": 1
  }]
},{
  "_id": 2,
  "OtherProperties": 1005
  "PersonInventory": [{
    "FirstName": "Joe",
    "MiddleName": "Bob",
    "LastName": "Blogs",
    "PersonId": 1
  }]
}]

我正在尝试使用此处较新的类型推断 mongodb c# 驱动程序语法来选择根文档中的所有唯一人员。

到目前为止已经尝试过,但出现错误,提示该方法不可用(我认为这与分组有关),任何人都可以告诉我哪里出了问题吗?

collection.Aggregate()
  .Match(m => m.PersonInventory.Count > o)
  .Unwind<RootDoc, Person>(t => t.PersonInventory)
  .Group(k => k.PersonId, g => g.First())
  .ToListAsync();

Models:

public class Person
{
  [BsonId]
  public long PersonId { get; set; }
  public string FirstName { get; set; }
  public string MiddleName { get; set; }
  public string LastName { get; set; }
}

public class RootDoc
{
  public long Id{ get; set; }
  //more props
  public IList<Person> PersonInventory { get; set; }
}

仅供参考,错误消息是Specified method is not supported..

堆栈跟踪:

   at MongoDB.Driver.Linq.Processors.AccumulatorBinder.GetAccumulatorArgument(Expression node)
   at MongoDB.Driver.Linq.Processors.AccumulatorBinder.TryGetAccumulatorTypeAndArgument(PipelineExpression node, AccumulatorType& accumulatorType, Expression& argument)
   at MongoDB.Driver.Linq.Processors.AccumulatorBinder.VisitPipeline(PipelineExpression node)
   at MongoDB.Driver.Linq.Expressions.PipelineExpression.Accept(ExtensionExpressionVisitor visitor)
   at MongoDB.Driver.Linq.Expressions.ExtensionExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at MongoDB.Driver.Linq.Processors.EmbeddedPipeline.EmbeddedPipelineBinder.Bind(Expression node, IBindingContext parent)
   at MongoDB.Driver.Linq.Processors.SerializationBinder.BindEmbeddedPipeline(MethodCallExpression node)
   at MongoDB.Driver.Linq.Processors.SerializationBinder.VisitMethodCall(MethodCallExpression node)
   at System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor visitor)
   at MongoDB.Driver.Linq.Processors.SerializationBinder.Visit(Expression node)
   at MongoDB.Driver.Linq.Translators.AggregateGroupTranslator.BindGroup[TKey,TDocument,TResult](PipelineBindingContext bindingContext, Expression`1 groupProjector, IBsonSerializer`1 parameterSerializer, Expression keySelector)
   at MongoDB.Driver.Linq.Translators.AggregateGroupTranslator.Translate[TKey,TDocument,TResult](Expression`1 idProjector, Expression`1 groupProjector, IBsonSerializer`1 parameterSerializer, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions)
   at MongoDB.Driver.GroupExpressionProjection`3.Render(IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry)
   at MongoDB.Driver.PipelineStageDefinitionBuilder.<>c__DisplayClass19_0`2.<Group>b__0(IBsonSerializer`1 s, IBsonSerializerRegistry sr)
   at MongoDB.Driver.DelegatedPipelineStageDefinition`2.Render(IBsonSerializer`1 inputSerializer, IBsonSerializerRegistry serializerRegistry)
   at MongoDB.Driver.AppendedStagePipelineDefinition`3.Render(IBsonSerializer`1 inputSerializer, IBsonSerializerRegistry serializerRegistry)
   at MongoDB.Driver.MongoCollectionImpl`1.<AggregateAsync>d__22`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.MongoCollectionImpl`1.<UsingImplicitSessionAsync>d__101`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MongoDB.Driver.IAsyncCursorSourceExtensions.<ToListAsync>d__16`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at App.Application.Services.CacheSyncService.<GetAllCrewAsync>d__9.MoveNext() in C:\Users\gdp\Sites\app\Services\CacheSyncService.cs:line 77
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at App.Application.Services.Sync.ReferenceDataSyncService.<ResolveCrewReferences>d__6.MoveNext() in C:\Users\gdp\Sites\app\Services\Sync\ReferenceDataSyncService.cs:line 46
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at App.API.Controllers.DataSyncController.<ResolveCrewReferences>d__3.MoveNext() in C:\Users\gdp\Sites\app\Controllers\DataSyncController.Triggers.cs:line 87
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__1`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__6.MoveNext()

我在 mongodb Jira 页面上进行了一些挖掘,看起来不支持变量 $$ROOT,因此不支持上述查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 Group Unwind 和 Project 的 MongoDb C# 类型聚合 的相关文章

随机推荐

  • JAXB:我应该如何编组复杂的嵌套数据结构?

    我有几个复杂的数据结构 例如 Map lt A Set lt B gt gt Set lt Map lt A B gt gt Set lt Map lt A Set lt B gt gt gt Map lt A Map lt B Set l
  • AWS S3 Java:d​​oesObjectExist 结果为 403:FORBIDDEN

    我的 Java 程序使用 AWS SDK 与 S3 存储桶交互时遇到问题 这是我用来创建 S3 客户端的代码 public S3StorageManager S3Config config throws StorageException B
  • Apache HttpClient 4.5 将 POST 请求重定向到 GET 请求

    我正在尝试点击 post 端点 但它给出了错误 302 当我在同一服务器上尝试另一个 get Url 时 它给了我 200 然后我使用 LaxRedirectStrategy 重定向了 post 请求 post 请求正在重定向到 get 请
  • 批处理文件:获取文件夹的创建日期

    有没有办法以纯批处理文件 无电源脚本 获取文件夹的创建日期 特别是 我想将它放入这个 for 循环中 FOR f tokens G in dir b s a d C asdf DO CALL loopbody tG G 该循环调用一个 函数
  • 使用 cmake 共享库的未定义引用

    我已经找到了很多地方来寻找这个答案 但我一直无法找到任何适合我的情况的东西 这看起来很容易 这就是为什么这如此令人沮丧 我正在用 CMAKE 构建一个项目 我正在生成两个共享库 一个包含另一个 我还生成了一个可执行文件 该可执行文件正在链接
  • Safari 钥匙串防止使用 html

    Solve 我在我的项目前一天搜索这个问题 最后我找到了下面带有插件的解决方案 这个插件的工作结构是这样的 它获取您的输入并克隆它 使用此克隆并创建相同的输入属性并将其克隆为另一个隐藏输入 之后删除您的原始输入并将隐藏和克隆的输入放在相同的
  • 当 DoubleBuffered 设置为 true 时重写 OnPaint 时出现问题

    我创建了一个源自面板的自定义控件 我用它来使用BackgroundImage 属性显示图像 我重写 OnClick 方法并将 isSelected 设置为 true 然后调用 Invalidate 方法并在重写的 OnPaint 中绘制一个
  • C++ 的默认继承访问说明符? [复制]

    这个问题在这里已经有答案了 我有一些必须包装的遗留代码 并且我遇到了这个声明 class Foo Bar 这似乎可以在 GCC 下编译 我知道这样不好 但我无法改变 我的问题是 如果不存在继承访问说明符 C 编译器如何处理它 对于类 默认值
  • 我无法让我的 Prolog DCG 与atom concat一起工作

    我无法让这个 Prolog DCG 代码工作 String1 string codes String1 Codes phrase spaces Output Codes spaces XXs gt X X 32 spaces Xs char
  • selenium RC 不运行整个测试套件

    我正在尝试使用 Selenium RC 运行 HTML testSuite 浏览器启动 第一个测试运行 然后停止 它不会继续到第二个测试用例 我将这两个测试用例命名为 html 扩展名 我正在使用火狐浏览器 如果我从 selenium RC
  • 如何在MATLAB中计算两个频率向量之间的余弦相似度?

    我需要在 MATLAB 中找到两个频率向量之间的余弦相似度 向量示例 a 2 3 4 4 6 1 b 1 3 2 4 6 3 如何在 MATLAB 中测量这些向量之间的余弦相似度 快速浏览一下数学定义余弦相似度 根据定义 您只需要点积向量的
  • 使用vba获取activex组合框的选定值

    如何获取组合框的选定值 我有一个组合框 其值为 公司 和 消费者 我想获取我选择的值 而不是索引 并将其存储在字符串中 像这样的东西 string a combobox value a gt 消费者 谢谢 如果您的组合框嵌入在电子表格中 您
  • 多个 Flutter 动画相继无法工作

    我是颤振的新手 目前我正在尝试制作一个简单的应用程序 当打开应用程序时 会出现一个文本fadeIn并改变其position from bottom to top 是的 有两个animations我想要Transit 第一个是FadeIn完成
  • 结束斜杠之前有空格吗?

    我经常在 XML 和 HTML 标记中看到结束斜杠之前有一个空格 XHTML 换行符可能是典型的示例 br 代替 br 这个空间似乎是多余的 其实我觉得这是多余的 写这个空间的原因是什么 我读到该空间解决了一些 向后兼容性问题 哪些向后兼容
  • 通过排除重叠本身来计算优先重叠时段的持续时间总和

    我有一个 R 代码 我正在尝试在 PostgreSQL 中重写它 以提供 grafana 仪表板 我确实有基础知识 所以我几乎完成了脚本的其他部分 但我现在在 PostgreSQL 中试图完成的事情超出了我的能力范围 我在 StackOve
  • 在计算中操作文本框变量

    我有一些代码试图在标签页中使用变量 第一个标签页只有一个用于用户输入的文本框 miles text 和一个用于计算的按钮 行程时间 里程 速度 miles text 中的值存储在名为 mileage 的变量中 而使用的速度存储在名为 spe
  • ajax文件在页面上上传多个输入

    我正在使用 ajaxFileUpload 如下所述 http www asp net ajaxLibrary AjaxControlToolkitSampleSite AjaxFileUpload AjaxFileUpload aspx 它
  • 不同设备的网格数

    我有一个问题 我应该知道数量gridview在为不同设备显示的每一行中 喜欢数量gridview平板电脑 WVGA 手机的每行 因为它们的屏幕宽度不同 是否有代码可以检查这一点 好的 您可以使用以下方式以编程方式设置列数 float sca
  • 什么基于java的CMS可以管理现有页面的内容?

    我们有一个现有的正在运行的java web应用程序 当前页面的内容是静态的 但页面仍然是jsp文件 它们的外观和感觉是专门设计的 我的客户现在想要使用 CMS 来管理新闻 事件等内容的更新 并对 jsp 代码进行最小的更改 我尝试了 ope
  • 带有 Group Unwind 和 Project 的 MongoDb C# 类型聚合

    我有一个这样的集合 id 1 OtherProperties 100 PersonInventory FirstName Joe MiddleName Bob LastName Blogs PersonId 1 id 2 OtherProp