
表结构
{ data_list : ['2:333','3:222','xxx'], sid: '1111111111111' } 要求返回 data_list 中符合指定正则的元素 /2:/
{ sid:'1111111111111', data_list: ['2:333'] } # 现在是用 find 可以做到,如果用 aggregate 怎么做呢? db.score.find( {sid:'1111111111111',data_list:/^2:/}, {"data_list.$": 1, sid:1 } ) 1 lithiumii 2021-07-11 21:30:07 +08:00 via Android 先 unwind 再 match ? |
2 wuwukai007 OP @lithiumii unwind 试了下,可以做到,但是效率有点低。 |
3 catinsides 2021-07-11 2343:34 +08:00 不知道你用的什么版本,4.2 可以这样: db.test.aggregate([{ $project: { data_list: { $filter: { input: '$data_list', as: 'd', cond: { $regexMatch: { input: '$$d', regex: /^2:/ } } } } } }]) |
4 wuwukai007 OP @catinsides 我昨天也搜到了$regerxMatch,但是服务器是 4.0.19 的版本的 |