【问题标题】:Complex query filtering of object arrays in MongoDb (C# Driver)MongoDb中对象数组的复杂查询过滤(C#驱动)
【发布时间】:2017-09-27 08:58:44
【问题描述】:

假设我有 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种方法都没有成功。

【问题讨论】:

    标签: c# mongodb mongodb-query mongodb-.net-driver


    【解决方案1】:

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

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

    【讨论】:

    • 如果当前的“Fruits”数组是一个单数对象,查询将如何修改? var filter = Builder.In(l => l.Fruits.Name,fruitNames); // 不工作
    • 你解决了吗还是你还需要帮助@Misi?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2018-02-04
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 2012-06-06
    • 2021-11-05
    相关资源
    最近更新 更多