我需要使用聚合函数获取MongoDB中字符串值的长度。
它适用于
db.collection_name.find({"$where":"this.app_name.length===12"})
但植入时
db.collection_name.aggregate({$match:
{"$where":"this.app_name.length===12"}
},
{
$group :
{
_id : 1,
app_downloads : {$sum: "$app_downloads"}
}
}
);
我得到了这个结果:
failed: exception: $where is not allowed inside of a $match aggregation expression
问题是:是否可以在聚合函数中使用$ where? 或者有没有办法在聚合函数中获取字符串值的长度?
提前致谢 埃里克
答案 0 :(得分:4)
MongoDB不支持聚合管道中的 $ where ,并希望这种情况永远不会发生,因为JavaScript会降低速度。从来没有,你仍然有选择:
1)М持有额外字段(例如app_name_len),而不是存储 app_name 长度,并在需要时查询它。
2)您可以尝试极慢的 MapReduce框架,您可以在其中使用JavaScript编写聚合。
答案 1 :(得分:0)
今天我遇到了同样的问题。
Mongodb不支持this.app_name.length,但您可以使用 $ regex 来执行此操作 - 这不是很快,但它仍然有效。
{"app_name": { $regex: /^.{12}$/ }}