将列表的两个字段与 mongoDb c# 驱动程序中的数据进行比较
Compare tow fields of a list with data in mongoDb c# driver
假设我有一个名为 filterProfile 的内存列表。
var filterProfile = people.Select(x => new {x.Name,x.Age}).ToList();
我需要 运行 在 mongodb 中进行这样的查询:
var resultData = await collection
.Find(x => filterProfile.Any(y => y.Name == x.Name && y.Age == x.Age))
.TolistAsync();
使用 $in
运算符,您可以检查数组中是否存在 SINGLE 字段。
如何同时检查 两个 字段?
可能吗?
我想到的唯一方法就是这样做:
var filter = Builders<Person>.Filter.Empty;
foreach (var item in people)
{
var nameFilter = Builders<Person>.Filter.Eq(x => x.Name, item.Name);
var ageFilter = Builders<Person>.Filter.Eq(x => x.Age, item.Age);
var loopFilter = Builders<Person>.Filter.And(nameFilter , ageFilter );
filter = Builders<Person>.Filter.Or(filter, loopFilter );
}
var resultData = await collection.Find(filter).TolistAsync();
它可以工作,但对我来说看起来不太干净。
假设我有一个名为 filterProfile 的内存列表。
var filterProfile = people.Select(x => new {x.Name,x.Age}).ToList();
我需要 运行 在 mongodb 中进行这样的查询:
var resultData = await collection
.Find(x => filterProfile.Any(y => y.Name == x.Name && y.Age == x.Age))
.TolistAsync();
使用 $in
运算符,您可以检查数组中是否存在 SINGLE 字段。
如何同时检查 两个 字段?
可能吗?
我想到的唯一方法就是这样做:
var filter = Builders<Person>.Filter.Empty;
foreach (var item in people)
{
var nameFilter = Builders<Person>.Filter.Eq(x => x.Name, item.Name);
var ageFilter = Builders<Person>.Filter.Eq(x => x.Age, item.Age);
var loopFilter = Builders<Person>.Filter.And(nameFilter , ageFilter );
filter = Builders<Person>.Filter.Or(filter, loopFilter );
}
var resultData = await collection.Find(filter).TolistAsync();
它可以工作,但对我来说看起来不太干净。