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 の長さを格納し、必要に応じてクエリを実行するための追加のフィールド (例: app_name_len) を保持します。

2) JavaScript で集計を記述できる非常に遅いMapReduce フレームワークを試すことができます。

于 2013-06-24T16:25:31.287 に答える