6

我需要使用聚合函数在 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 ?或者有什么方法可以在聚合函数中获取字符串值的长度?

提前感谢埃里克

4

2 回答 2

5

MongoDB 不支持聚合管道中的$where并希望这永远不会发生,因为 JavaScript 会减慢速度。无论如何,您仍然有选择:

1) 保留额外的字段(例如 app_name_len),而不是存储app_name长度并在需要时对其进行查询。

2)您可以尝试极慢的 MapReduce 框架,您可以在其中使用 JavaScript 编写聚合。

于 2013-06-24T16:25:31.287 回答
0

今天我遇到了同样的问题。

Mongodb 不支持 this.app_name.length,但是你可以使用$regex来完成这个条件- 这不是很快,但它仍然有效。

{"app_name": { $regex: /^.{12}$/ }}
于 2015-10-15T08:46:30.233 回答