簡體   English   中英

使用asyncmongo從MongoDB返回不同的鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM