如何在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提供程序不支持此功能-我该怎么做?
答案 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();