mongo aggregate 如何只返回数组中符合指定正则的某个元素?

2021-07-11 21:21:50 +08:00
 wuwukai007

表结构

 {
       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 }
    )
1405 次点击
所在节点    Python
4 条回复
lithiumii
2021-07-11 21:30:07 +08:00
先 unwind 再 match ?
wuwukai007
2021-07-11 21:36:16 +08:00
@lithiumii unwind 试了下,可以做到,但是效率有点低。
catinsides
2021-07-11 23:43:34 +08:00
不知道你用的什么版本,4.2 可以这样:
db.test.aggregate([{
$project: {
data_list: {
$filter: {
input: '$data_list',
as: 'd',
cond: {
$regexMatch: {
input: '$$d',
regex: /^2:/
}
}
}
}
}
}])
wuwukai007
2021-07-12 11:03:11 +08:00
@catinsides 我昨天也搜到了$regerxMatch,但是服务器是 4.0.19 的版本的😭

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/788882

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX