[英]Return distinct keys from MongoDB using asyncmongo
我正在使用帶有Tornado + gen.engine的asyncmongo,只是想知道db.collection.distinct("mykey")
的語法是什么?
我認為它是這樣的
result, error = yield gen.Task(settings.DB.my_data.find, {}, distinct=[("key","mykey")])
但那不行。 無論出於何種原因,我都無法在網上找到任何這樣的例子。
謝謝。
問題是,“distinct”不是查詢的選項,它是一個單獨的命令:
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}
您需要的數據是結果['值']。
使用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/
事實證明我將切換到Motor,它支持distinct()作為查詢,另外還有http://emptysquare.net/motor/pymongo/api/motor/generator_interface.html#generator-interface ,這對於等待非常方便在觸發回調之前完成多個查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.