mongodb过滤器和项目只匹配的子文档

时间:2017-10-19 18:59:23

标签: arrays mongodb mongodb-query aggregation-framework

假设我们有以下文件:

{
 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' }
      ]
 }

我试图用聚合框架来解决这个问题但是真的在努力解决这个问题。

1 个答案:

答案 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

之后针对不区分大小写的放置/运行上述查询