2012-01-03 4 views
2

mongodbデータベースに測定値が埋め込まれた一連のオブジェクトがあります。私はmap/reduceを行って、測定値に関する統計を取得しようとしています。さて、私はそれにいくつか問題があったので、できるだけシンプルにしました。それぞれの測定の数を取得してください。単純なマップ/ reduceのコンテキストで、「不足している:プロパティID」の意味は何ですか?

Mon Jan 2 16:05:53 SyntaxError: missing : after property id (shell):1

私は削減/これが私のマップのコンテキストで何を意味するかを見るためにしようとしているが、私はただ見ていないよ。私はこのクエリを実行すると、私はエラーを取得する

m = function() { 
    emit (mp, { meas: this.measurements }); 
}; 

r = function() { 
    return { count: meas.length }; 
}; 

res = db.meas_points.mapReduce(m, r, 
    {query : { measurements : {$exists: true}}}, 
    {out: { "measurements_stats" }}); 

それ。私はmongodbのウェブサイト(http://www.mongodb.org/display/DOCS/MapReduceシェルの例2)からコードを取り出し、それを自分のニーズに適合させました。私はすべてのことを正しくやっているようですが、私はこの謎めいたエラーを続けています。私はidフィールドをまったく使用していません - 私は不正なレコードまたは何かがある可能性がありますか?

答えて

2

return { count: meas.length }; 

あなたがreduce関数のシグネチャを変更する必要がありmeasを解決することはできません。これに渡さ

var r = function(mp, measValues) { 
         return Array.sum(measValues.length); 
        }; 
ここ

measValues関数自体を減らす配列

です。注:マップ機能でmpは、あなたのコレクションmeas_pointsのID /キーであれば、this.mp

+0

この質問はとても古いので、答えに印をつける。だから、この人は少なくとも答えようとしているのです。ありがとう。 – jcollum

0

{ "measurements_stats" }は無効な構文です。

配列を意味しましたか?この行で

+0

にその行を変更しますです確かに?サンプルには 'res = db.things.mapReduce(m、r、{out:" myoutput "});'があります。私は 'クエリ'のためにそれを持っていなければならないと思います。 '' {':out' 'price_stats'} ''アサーション ''エラーが発生しました: '' out 'は文字列またはオブジェクトでなければなりません " – jcollum

関連する問題