假设我们有以下文件:
{
reportName: 'ABC_REPORT'
reports: [
{
"startDate" : ISODate("2017-07-02T00:00:00Z"),
"endDate" : ISODate("2017-07-08T00:00:00Z"),
"data" : [ { DATA_ID: '012345678004' }, { DATA_ID: 'abcd1984500' } ]
},
{
"startDate" : ISODate("2017-07-09T00:00:00Z"),
"endDate" : ISODate("2017-07-15T00:00:00Z"),
"data" : [ ] },
{
"startDate" : ISODate("2017-07-16T00:00:00Z"),
"endDate" : ISODate("2017-07-22T00:00:00Z"),
"data" : [{ DATA_ID: '012345678009' }, { DATA_ID: '11111111012' }]
},
{
"startDate" : ISODate("2017-07-16T00:00:00Z"),
"endDate" : ISODate("2017-07-22T00:00:00Z"),
"data" : [{ DATA_ID: 'abcd9809876' }]
}
]}
现在我想编写一个查询,该搜索应该搜索以(' 01234',' abcd')开头的DATA_ID,并期望获得如下数组:
{
data: [{ DATA_ID: '012345678004' },
{ DATA_ID: 'abcd1984500' },
{ DATA_ID: '012345678009' },
{ DATA_ID: 'abcd9809876' }
]
}
我试图用聚合框架来解决这个问题但是真的在努力解决这个问题。
答案 0 :(得分:1)
db.stackOverflow.aggregate([
{$unwind:"$reports”},
{$unwind:"$reports.data"},
{$match:{"reports.data.DATA_ID":{$in:[/^abcd/,/^01234/]}}},
{$group:{_id:null, data:{$push:{"DATA_ID":"$reports.data.DATA_ID"}}}}
])
如果您希望在i
/
运行上述查询