【问题标题】:what is the mechanism for performing an intersect in a Mongo Linq query在 Mongo Linq 查询中执行相交的机制是什么
【发布时间】:2026-01-20 00:00:01
【问题描述】:

如何在 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 提供程序不支持这个 - 我该怎么做?

【问题讨论】:

    标签: c# mongodb linq


    【解决方案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();
    

    【讨论】:

    • 好家伙!