gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:52:30 26 4
gpt4 key购买 nike

我想在执行 $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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com