我有一個文件,看起來像這裏面:MongoDB中查詢的子文檔中的元素相匹配的條件
{
"spans" : [
{
"from" : ISODate("2016-01-01T00:00:00.000+0000"),
"to" : ISODate("2016-01-02T00:00:00.000+0000")
},
{
"from" : ISODate("2016-01-03T00:00:00.000+0000"),
"to" : ISODate("2016-01-04T00:00:00.000+0000")
},
{
"from" : ISODate("2016-02-01T00:00:00.000+0000"),
"to" : ISODate("2016-02-04T00:00:00.000+0000")
}
]
}
我想查詢爲一個文件,但只有一個從更大於2016年返回跨度-1-2
我第一次嘗試$ elemMatch,但它只返回第一個匹配的跨度。
這似乎是$filter運算符是正確的方式來做到這一點,但我似乎找不到任何ProjectionBuilder方法來做一個過濾器。
我覺得我想要做這樣的查詢:
.aggregate([
{
$match:{/*Some other filter*/}
},
{
$project: {
Spans: {
$filter: {
input: "$spans",
as: "span",
cond: { $gt: [ "$$span.from", ISODate("2016-01-02T00:00:00Z") ] }
}
}
}
}
])
我想應該是這樣的,但沒有過濾器的方法
var pb = new ProjectionDefinitionBuilder<MyObj>();
var projection = pb.Combine(new List<ProjectionDefinition<MyObj>> {
pb.Filter(x => x.Spans, s => s.From > from))//no such thing...
});
var result= _collection.
.Match(x=>/*my match*/)
.Project<MyObj>(projection)
.ToList();
我缺少什麼?是否應該使用ProjectionBuilder以外的其他東西?
您的樣本是否包含日期數據?它顯示非日期數據。 – Saleem
@Saleem是它在實際數據庫中的一個日期虐待更新我的JSON –
您的示例數據包含無效的ISO日期:)日期應該是兩位數字格式。 – Saleem