2017-09-27 8 views
0

のは、私が文書のMongoDBにおけるオブジェクト配列の複雑なクエリフィルタ(C#のドライバーに)

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

Q喧騒てきたとしましょう:はどのように私は果物の名前のリストによって果実の配列を照会することができますか?

私はこのように試してみました:

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通りの方法で試してみました。

答えて

1

これを試すことができますか?少しハックですが、私はそれがうまくいくことを確信しています:

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

現在の "Fruits"配列が特異なオブジェクトである場合、クエリはどのように変更されますか? var filter = Builder .In(l => l.Fruits.Name、fruitNames); //うまくいきません – Misi

+0

あなたはそれを整理しましたか、まだ助けが必要です@ミシ? – BOR4

関連する問題