在Mongo Linq查询中执行相交的机制是什么

时间:2018-08-22 04:24:33

标签: c# mongodb linq

如何在Linq for Mongo中编写where子句,以确定文档中的集合是否包含本地集合的任何成员。

即(这是我期望的工作,但没有)

var myLocalList = <PopulateMyLocalList>;

var myDocs = db.GetCollection<MyDoc>("MyDocs").AsQueryable();
var result =  myDocs.Where(d => d.MyCollection.Intersect(myLocalList).Any());

因此,假设Mongo Linq提供程序不支持此功能-我该怎么做?

1 个答案:

答案 0 :(得分:1)

在MongoDB语法中,有一个$in运算符,当您要将内存中的数组与文档中嵌入的另一个数组进行匹配时,它的工作原理与intersect + any相似。

  

如果该字段包含一个数组,则$ in运算符将选择其字段包含一个数组的文档,该数组包含至少一个元素与指定数组中的值匹配(例如,等)。 )

在MongoDB C#驱动程序中,您可以使用AnyIn将该操作符应用于两个数组。试试:

db.col.save({ Collection: [1,2,3] })l

然后用C#:

var filterBuilder = Builders<YourModel>.Filter;
var inMemoryList = new List<int>() { 3, 4, 5 };

var result = Col.Find(filterBuilder.AnyIn(x => x.Collection, inMemoryList)).ToList();