繁体   English   中英

MongoDb(C#驱动程序)中对象数组的复杂查询过滤

[英]Complex query filtering of object arrays in MongoDb (C# Driver)

假设我有din文件

"Id" : "lot1",
"Fruits" : [
       [{ "Id": "fruit1", "Name": "apple"}, { "Id": "fruit2", "Name": "carrot"}]
       [{ "Id": "fruit3", "Name": "banana"}]
     ]

问:如何通过水果名称列表查询Fruits数组?

我已经这样尝试过:

var fruitNames = new List<string>(){ "apple", "banana" };
var builder = Builders<Lot>.Filter;
var filter = builder.AnyIn(l => l.Fruits.Select(f => f.Name), fruitNames); //TAKE 1
var filter = builder.Where(l => l.Fruits.Select(f => f.Name).Any(f => fruitNames.Contains(f)));//TAKE 2
var filter = builder.AnyIn("Fruits.Name", fruitNames );//TAKE 3
var results = mongoContext.Lots.Find(filter).ToList();

我尝试了这3种方式,但均未成功。

你可以试试这个吗? 这是一个小技巧,但我很确定它会起作用:

var filter= Builders<Lot>.Filter.ElemMatch(y => y.fruits, x => fruitNames.Contains(x.name));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM