2013-07-31 7 views
6

人名のレコードと到着時刻を数字として表現したMYSQLテーブルがあります。それをマラソンと考えてください。MongoDBへの移行:GROUP BY + WHEREを問い合わせる方法

SELECT name, COUNT(*) FROM mydb.mytable 
WHERE Time>=100 AND Time<=1000 
GROUP BY name 

をし、結果として、私が手に:私は、多くの人が同じ名前のどこに一定の隙間に到着した方法を知りたい

Susan, 1 
John, 4 
Frederick, 1 
Paul, 2 

私は今のMongoDBに移行しています、コード化するためにPythonを使用しています(私はPymongoのヘルプを求めています)。私はGROUP BY同等の情報を探してみました(NoSQLデータベースはSQLのものよりも悪いですが)。しかし、彼らは新しい契約APIをリリースして以来、私はhjaven'tを見つけることができました。このような単純な例は、グループメソッド、Map-Reduceメソッド、まったく新しいアグレゲートAPIで解決しました。

助けが必要ですか?

答えて

17

ドキュメントの例としては、Googleとこのサイトのすべての例があります。

いくつかの参照:

そして、いくつかのコードのために:

self.db.aggregate(
    # Lets find our records 
    {"$match":{"Time":{"$gte":100,"$lte":1000}}}, 

    # Now lets group on the name counting how many grouped documents we have 
    {"$group":{"_id":"$name", "sum":{"$sum":1}}} 
) 
+0

私は$の名前を使用すると、疑問を私に作ったものだと思い名前はデータベースのフィールド名であり、pymongoタグではありません。なぜそのように表現されたフィールドの名前はグループ化されますか? –

+1

@RomanRdgz私が正直であれば分かりませんが、10genに質問する必要があるという設計上の決定でしたが、 '$ '文字列はMongoDB内のリテラルとして扱われました。 MongoDBはフィールド値であるかのように反応します – Sammaye

関連する問題