如何在MongoDB中拆分字符串?

时间:2015-05-13 22:40:32

标签: regex mongodb

示例数据如下:

{"BrandId":"a","Method":"PUT","Url":"/random/widgets/random/state"}
{"BrandId":"a","Method":"POST","Url":"/random/collection/random/state"}
{"BrandId":"b","Method":"PUT","Url":"/random/widgets/random/state"}
{"BrandId":"b","Method":"PUT","Url":"/random/widgets/random/state"}

我需要在pattern / random / widgets / random / state中找到method = put和url的所有行。 "随机"是一个固定长度的随机字符串。预期的结果是:

{"BrandId":"a","total":1}
{"BrandId":"b","total":2}

我尝试编写代码为:

db.accessLog.aggregate([
    {$group: {
        _id: '$BrandId',
        total: {
                $sum:{
                  $cond:[{$and: [ {$eq: ['$Method', 'POST']},
                        {Url:{$regex: /.*\/widgets.*\/state$/}} ]}, 1, 0]
                }
            },
    {$group: {
        _id: '$_id',
       total:{$sum:'$total'}
    }
])

但正则表达式不起作用,所以我想我需要尝试其他方式来做,也许是拆分字符串。我需要使用$ cond。请保留。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用以下查询来实现您的目标,我假设名为' products'

的集合中的数据
if (user.status.indexOf('haste') >= 0) {
  // do action
}

<强> 1。 $匹配: 查找所有包含&#39; PUT&#39;方法和指定模式的Url。

<强> 2。 $ group:按品牌ID分组,每个条目分1次

答案 1 :(得分:0)

Greedy matching就是问题所在。

假设非零数量的随机数&#39;字符(听起来很明智),尝试正则表达式:

/[^\/]+\/widgets\/[^\/]+\/state$/