У меня есть коллекции mongodb (документы),
для каждого документа (doc1) я хочу найти все остальные документы (doc2)
где пересечение doc2.LinexText [any] .Words с doc1.IDs не является пустым.
doc {
"IDs": ["ID1", "ID2"],
"LineText": [{
"Words": ["W1", "W2"]
}]
}
public class MongoDocument : Entity
{
public List<string> IDs{ get; set; } = new List<string>();
public List<LineText> Lines { get; set; } = new List<LineText>();
}
public class LineText
{
public List<string> Words { get; set; } = new List<string>();
}
моей первой попыткой было использовать приведенный ниже фильтр, но он не работал (исключение не поддерживается)
var filter = Builders<MongoDocument>.Filter.And(Builders<MongoDocument>.Filter.ElemMatch(x => x.LinesText, x => x.Words.Intersect(mongoDoc.IDs).Any());
Я получил это исключение:
System.ArgumentException: 'Неподдерживаемый фильтр:
Любой ({документ} {} Слова .Intersect (значение (System.Collections.Generic.List`1 [System.String]))).
так что сейчас я сопоставляю только первый идентификатор, пока не выясню, как сопоставить любой идентификатор в списке.
var filter = Builders<MongoDocument>.Filter.And(Builders<MongoDocument>.Filter.ElemMatch(x => x.LinesText, x => x.Words.Contains(mongoDoc.IDs[0]));
как я могу выполнить это пересечение с помощью драйвера MongoDB .NET?