我有這些類:在陣列結合了父文檔的屬性值和ElemMatch
public class Parent
{
public int Id { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public ChildInfo ChildInfo { get; set; }
}
public class ChildInfo
{
public int Age { get; set; }
...other properties...
}
所以給家長的集合,我需要用一個特定ID返回父母,但前提是它沒有具有特定年齡的ChildInfo的孩子。
我覺得我很接近。以下是我迄今爲止:
var childQuery = Query<Child>.NE(c => c.ChildInfo.Age, 5);
var finalresult = collection.Find(Query.And(Query<Parent>.EQ(p => p.Id, 3245),
Query<Parent>.ElemMatch(p => p.Children, builder => childQuery)));
不過,我得到這些結果:
如果沒有父母3245,無返回值(正確的)。
當父3245沒有孩子時,查詢返回什麼(錯誤)。
當父3245有一個小孩3歲時,查詢返回父(正確)。
當父母3245有一個孩子3歲和一個孩子5歲時,查詢返回父母(錯誤)。
當父母3245有一個孩子3歲和一個孩子7歲時,查詢返回父母(正確)。
它看起來好像查詢的第一部分(Parent.Id)起作用。但是下半場似乎總是返回父節點,除非列表爲空。