使用C#针对Mongodb的数组字段创建In过滤器

扎克

我有一个与C#下面的对象相似的对象。我想找到匹配的人员对象,其中包含与提供的项目相匹配的项目,type并且该项目的项目sourceId也存在于提供的数组中sourceIds

Person: {
  id: 1,
  items: [
    {
      type: "one",
      sourceId: 2
    },
    {
      type: "two"
      sourceId: 3
    }
  ]
}

到目前为止,我已经提出了:

var filter = Builders<Person>.Filter.In(p => p.items.Where(i => i.type == "one").FirstOrDefault().sourceId, providedIds);
var results = PersonCollection.FindAsync(filter);

当我运行时,出现以下错误:

无法确定p => p.items.Where(i =>(i.type ==“ one”))的序列化信息。FirstOrDefault()。sourceId

从我可以找到的内容来看,似乎Mongo驱动程序无法理解FirstOrDefault(或者可能在哪里)。我如何才能完成此查询?

米克尔

MongoDB .NET驱动程序无法解释您的过滤器并将其转换为MongoDB查询语言。

您必须改用$ elemMatch,过滤器如下所示:

{ "items" : { "$elemMatch" : { "type" : "one", "sourceId" : { "$in" : [1, 2, 3] } } } }

C#版本:

var filter = Builders<Person>.Filter.ElemMatch(f => f.items,
            item => item.type == "one" && providedIds.Contains(item.sourceId));

生成与$elemMatch我上面粘贴的语句完全相同的语句

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 C# MongoDB 驱动程序在 for 循环中创建过滤器的布尔逻辑

在 C# 中使用 GMail API 创建过滤器

如何在 C# 中使用 Mongodb.Driver 对 MongoDb 表中的数组对象应用过滤器?

使用比较运算符在 Outlook C# 中创建自定义字段过滤器

使用MongoDB C#驱动程序在嵌套数组上使用过滤器构建器查询

集合的每个文档中的MongoDB过滤器数组字段

具有特定字段的 mongodb 过滤器数组

如何在 MongoDB 中使用数组嵌套过滤器获取特定字段值?

使用过滤器和选项在PHP MongoDB中查询文档的数组字段

C# MongoDB 2. 查找文档比较其字段:不支持的过滤器

使用'.AnyIn'方法为嵌套数组创建MongoDB Builders过滤器

过滤器数组仅使用标题创建新数组

使用Logstash过滤器创建新字段

BigQuery - 分组依据并使用数组字段作为过滤器

使用Mongodb($ or + $ and)创建渐进式过滤器

MongoDB:使用数组过滤器进行更新插入

C#中的多个MongoDb过滤器

应用过滤器 GridFS MongoDb C#

C# MongoDB 过滤器返回整个对象

让grok过滤器创建嵌套字段

MongoDB文档中的过滤器数组

mongodb嵌套文档的过滤器数组

过滤器数组,创建嵌套选项

过滤器未创建新数组?

使用 nest c# 的 Elasticsearch 过滤器组

REST字段过滤器的使用

如何在mongodb中的过滤器之后输出/映射仅包含必需字段的数组?

$eq 内部过滤器不适用于数组字段 - Mongodb

Mongodb使用多个过滤器聚合