未在空集合上创建电机索引

时间:2015-11-01 20:29:46

标签: mongodb tornado-motor

我有以下代码来设置我的数据库:

self.con = motor.MotorClient(host, port)
self.Db = self.con.DB
self.Col = self.Db.Col

self.Col.create_index("c")
self.Col.create_index("h")

当我运行index_information()时,我只看到_id字段的索引信息。但是,如果在插入某些条目后移动create_index(),则index_information()会显示新索引。这是否意味着我必须等到我在集合中有条目才能创建索引?有没有其他方法可以做到这一点,因为我从一个空集合开始?

1 个答案:

答案 0 :(得分:2)

可以在空的或不存在的MongoDB集合上创建索引,索引显示在index_information中:

>>> from tornado import ioloop, gen
>>> import motor
>>>
>>> con = motor.MotorClient()
>>> db = con.test
>>> col = db.collection
>>>
>>>
>>> @gen.coroutine
... def coro():
...     yield db.drop_collection("collection")
...     yield col.create_index("c")
...     yield col.create_index("h")
...     print((yield col.index_information()))
...
>>> ioloop.IOLoop.current().run_sync(coro)
{u'c_1': {u'key': [(u'c', 1)], u'v': 1}, u'_id_': {u'key': [(u'_id', 1)], u'v': 1}, u'h_1': {u'key': [(u'h', 1)], u'v': 1}}

因为我没有看到任何"产量"您的示例代码中的语句或任何回调,我怀疑您没有正确使用Motor。电机是异步的;为了等待与数据库服务器通信的任何Motor方法完成,您必须将回调传递给方法,或者产生方法返回的Future。

有关更多信息,请参阅教程:

http://motor.readthedocs.org/en/stable/tutorial.html#inserting-a-document

关于使用Motor调用异步方法的讨论(这适用于所有Tornado库,而不仅仅是Motor)从"插入文档"开始。部分。