1

Tornado + gen.engine で asyncmongo を使用していますdb.collection.distinct("mykey")

のようなものだと思います

result, error = yield gen.Task(settings.DB.my_data.find, {}, distinct=[("key","mykey")])

しかし、それはうまくいきません。何らかの理由で、このオンラインの例を見つけることができません。

ありがとう。

4

2 に答える 2

3

問題は、「個別」がクエリのオプションではなく、別のコマンドであることです。

http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Distinct

したがって、AsyncMongo の command() メソッドを使用します。

>>> from tornado.ioloop import IOLoop
>>> import asyncmongo
>>> db = asyncmongo.Client(pool_id='mydb', host='127.0.0.1', port=27017, maxcached=10, maxconnections=50, dbname='test')
>>> def callback(result, error):
...     print result
...     IOLoop.instance().stop()
...
>>> db.command('distinct', 'my_data', key='my_key', callback=callback)
>>> IOLoop.instance().start()
{u'stats': {u'cursor': u'BasicCursor', u'timems': 0, u'nscannedObjects': 5, u'nscanned': 5, u'n': 5}, u'values': [1.0, 2.0], u'ok': 1.0}

必要なデータは result['values'] にあります。

AsyncMongo のコマンドを使用するその他の例は、そのテスト スイートにあります。

https://github.com/bitly/asyncmongo/blob/master/test/test_command.py

また、一般的な MongoDB コマンドに関する情報 (例は PHP で書かれていますが、私たちのような Python コーダーでも簡単に理解できます):

http://www.kchodorow.com/blog/2011/01/25/why-command-helpers-suck/

于 2012-09-25T16:47:24.213 に答える
1

クエリとしてdistinct()をサポートするMotorに切り替えることになります。さらに、http://emptysquare.net/motor/pymongo/api/motor/generator_interface.html#generator-interfaceを使用すると、待機に非常に便利です。コールバックを起動する前に終了する複数のクエリ。

于 2012-09-25T16:20:53.303 に答える