【发布时间】:2020-11-10 14:59:20
【问题描述】:
我有一些具有以下结构的文档。见附图。
每个文档都包含一个“FileMeta”对象数组,每个 FileMeta 对象都包含一个“StatusHistory”对象数组。我试图只获取包含 StatusCode 等于 4 并且 TimeStamp 大于某个日期时间的 FileMetas。
尝试了以下查询,但它只返回每个文档的第一个 FileMeta 元素。
db.getCollection('Collection').find({'ExternalParams.RequestingApplication':'aaa.bbb'},
{ "FileMeta": { $elemMatch: { "StatusHistory":{ $elemMatch:{ "StatusCode": 4, "TimeStamp": { $gt: ISODate("2020-06-28T11:02:26.542Z")} } } } }} )
我做错了什么?
这是文档结构:
{
"_id" : ObjectId("5ef84e2ec08abf38b0043ab4"),
"FileMeta" : [
{
"StatusHistory" : [
{
"StatusCode" : 0,
"StatusDesc" : "New File",
"TimeStamp" : ISODate("2020-06-28T11:00:46.286Z")
},
{
"StatusCode" : 2,
"StatusDesc" : "stby",
"TimeStamp" : ISODate("2020-06-28T11:02:20.400Z")
},
{
"StatusCode" : 4,
"StatusDesc" : "success",
"TimeStamp" : ISODate("2020-06-28T11:02:26.937Z")
}
]
},
{
"StatusHistory" : [
{
"StatusCode" : 0,
"StatusDesc" : "New File",
"TimeStamp" : ISODate("2020-06-28T11:00:46.286Z")
},
{
"StatusCode" : 2,
"StatusDesc" : "stby",
"TimeStamp" : ISODate("2020-06-28T11:02:20.617Z")
},
{
"StatusCode" : 4,
"StatusDesc" : "success",
"TimeStamp" : ISODate("2020-06-28T11:02:26.542Z")
}
]
}
],
}
我只想返回包含满足以下条件的 StatusHistory 的 FileMeta 对象:StatusCode = 4 和 TimeStamp > SomeDateTime
【问题讨论】: