是否可以在mongodb聚合函数中使用“$ where”

时间:2013-06-24 16:04:23

标签: mongodb pymongo

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

提前致谢 埃里克

2 个答案:

答案 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}$/ }}