示例数据如下:
{"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。请保留。谢谢!
答案 0 :(得分:1)
您可以使用以下查询来实现您的目标,我假设名为' products'
的集合中的数据if (user.status.indexOf('haste') >= 0) {
// do action
}
<强> 1。 $匹配:强> 查找所有包含&#39; PUT&#39;方法和指定模式的Url。
<强> 2。 $ group:按品牌ID分组,每个条目分1次
答案 1 :(得分:0)