使用c#Mongodb驱动程序查询并投影嵌套数组



嗨,我正在学习如何将mongoDb与c#驱动程序一起使用。我有一个类似的收藏:

public class DataSnapshot
{
[BsonId]
public ObjectId InternalId { get; set; }
public Int Id { get; set; }
public string Identifier1 { get; set; }
public string Identifier2 { get; set; }
public List<NestedData> NestedData { get; set; }
}

public class NestedData
{
public DateTime TimeStamp { get; set; }
public double Info1 { get; set; }
public double Info2 { get; set; }
}

嵌套的数据可能非常大。

我想查询集合以返回一个日期范围内所有嵌套数据的列表(理想情况下,将多个快照中的数据连接在一起,但只有一个快照是一个好的开始(

我很难弄清楚如何正确地过滤和投影它。我读过关于如何过滤、如何过滤和投影的例子,但我很难在的所有这些条件下都能做到这一点

我正在尝试做这样的事情:

context.DataSnapshot.Find(x => x.Identifier1 == "foo" && x.Identifier2 == "bar" && x.NestedData.Timestamp > DateTime.Now.AddYears(-1)).Project(x => x.NestedData).ToList();

最好的方法是什么?

感谢

您可以使用LINQ查询:

var q = from doc in col.AsQueryable()
where doc.Identifier1 == "foo" && doc.Identifier2 == "bar"
select doc.NestedData
into nested
from nestedDoc in nested
where nestedDoc.TimeStamp > DateTime.Now.AddYears(-1)
select nestedDoc;
var results = q.ToList();

它被翻译成以下MongoDB聚合:

[
{ 
"$match" : { 
"Identifier1" : "foo", 
"Identifier2" : "bar" 
} 
}, 
{ 
"$project" : { 
"NestedData" : "$NestedData", 
"_id" : 0 
} 
}, 
{ 
"$unwind" : "$NestedData" 
}, 
{ 
"$project" : { 
"nested" : "$NestedData", 
"nestedDoc" : "$NestedData", 
"_id" : 0 
} 
}, 
{ 
"$match" : { 
"nestedDoc.TimeStamp" : { 
"$gt" : ISODate("2019-04-24T23:36:42.519Z") 
} 
} 
}, 
{ 
"$project" : { 
"nestedDoc" : "$nestedDoc", 
"_id" : 0 
} 
}
]

因此,整个筛选将在数据库中执行。

相关内容

  • 没有找到相关文章

最新更新