javascript - $project 上的 mongo-aggregation : apply regex grouping, 字符串处理

标签 javascript mongodb mongodb-query

我想在执行 $project 时应用一些简单的字符串操作,是否可以在 $project 上应用类似以下函数的东西? :

var themeIdFromZipUrl = function(zipUrl){
    return zipUrl.match(/.*\/(T\d+)\/.*/)[1]
};

我正在使用以下查询:

db.clientRequest.aggregate(
{
$match: {
  "l": {$regex: ".*zip"},
  "t": { "$gte": new Date('1/SEP/2013'),
                    "$lte": new Date('7/OCT/2013')
                    }
  }
},
{
  $project: {"theme_url" : "$l", "_id": 0, "time": "$t"}
},
{
  $group: {   _id: {
                      theme_url: "$theme_url",
                      day: {
                              "day": {$dayOfMonth : "$time"},
                              "month": {$month: "$time"},
                              "year": {$year: "$time"}
                            },
              },
              count: {$sum:1}
  }
}

)

这将返回以下内容:

        {
        "_id" : {
            "theme_url" : "content/theme/T70/zip",
            "day" : {
                "day" : 13,
                "month" : 9,
                "year" : 2013
            }
        },
        "count" : 2
    }

我可以在 theme_url 字段上应用上面的函数并将其转换为 theme_id 吗?我稍微看了一下 Map-Reduce,但我不确定对于这样一个简单的案例来说它是否有点太复杂了。

谢谢,

阿米特。

最佳答案

目前无法使用聚合框架执行此操作。

您可以使用 MapReduce 来完成,但这可能会减慢整个过程(如果数据量很大)。

如果这是聚合的最后一步,您也可以在聚合完成后在客户端执行此操作。例如在 Mongo shell 中:

var aggregationResults = col.aggregate([ /* aggregation pipeline here */]);
aggregationResults.results.forEach(function(x) { 
  x._id.theme_id = themeIdFromUrl(x._id.themeUrl);
});

当然,如果您使用的是另一种语言的驱动程序,则必须使用您正在使用的任何语言来执行此操作。

一般来说,如果您的数据包含 theme_url 并且 theme_id 在 URL 中进行了编码,那么将其存储在自己的字段中可能是有意义的。 Mongo 不是一个很好的文本操作工具。

关于javascript - $project 上的 mongo-aggregation : apply regex grouping, 字符串处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19654711/

相关文章:

Javascript 等效于 Python 的 zip 函数

javascript - 为什么我的页面不反射(reflect)我在代码中所做的更改?

mongodb - MongoDB中的 `$or`和 `$in`查询如何排序?

javascript - mongodb : get all users

arrays - 如何计算另一个数组中一个数组中的匹配元素 MongoDB

javascript - tf.browser.fromPixels 从 img 元素返回全零

javascript - 未捕获的 HierarchyRequestError 为 "jQuery Ui Sortable"

mongodb - 如何在 Mongoose 模型上使用 partialFilterExpression

MongoDB - 从任意深度和对象结构获取子文档

mongodb - 如何使用 mongodb 官方驱动程序使用比较运算符构建查询?