未在空集合上创建电机索引
Motor Index not created on empty Collection
我有以下代码来设置我的数据库:
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()
会显示新索引。这是否意味着我必须等到集合中有条目才能创建索引?由于我从一个空集合开始,还有其他方法可以做到这一点吗?
您可以在空的或不存在的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}}
由于我在您的示例代码或任何回调中没有看到任何 "yield" 语句,我怀疑您没有正确使用 Motor。电机是异步的;为了等待与数据库服务器通信的任何 Motor 方法完成,您必须将回调传递给该方法,或者将 Future 交给方法 returns.
有关更多信息,请参阅教程:
http://motor.readthedocs.org/en/stable/tutorial.html#inserting-a-document
关于使用 Motor 调用异步方法的讨论(这适用于所有 Tornado 库,而不仅仅是 Motor)从 "inserting a document" 部分开始。
您可以非常轻松地在 mongodb 上创建索引(即使在空集合上)使用
field_name
和 direction
.
field_name
: can be any field on which you want to create the index.
direction
: can be any one from these values: 1
, -1
, 2dsphere
, text
or hashed
Refer MotorCollection Doc for details
在下面的代码中,我尝试使用 motor
库和 python
创建索引。
db.collection_name.create_index([("field_name", 1)] # To create ascending index
db.collection_name.create_index([("geoloc_field_name", "2dsphere")] # To create geo index
db.collection_name.create_index([("field_name", "text")] # To create text based index
我有以下代码来设置我的数据库:
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()
会显示新索引。这是否意味着我必须等到集合中有条目才能创建索引?由于我从一个空集合开始,还有其他方法可以做到这一点吗?
您可以在空的或不存在的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}}
由于我在您的示例代码或任何回调中没有看到任何 "yield" 语句,我怀疑您没有正确使用 Motor。电机是异步的;为了等待与数据库服务器通信的任何 Motor 方法完成,您必须将回调传递给该方法,或者将 Future 交给方法 returns.
有关更多信息,请参阅教程:
http://motor.readthedocs.org/en/stable/tutorial.html#inserting-a-document
关于使用 Motor 调用异步方法的讨论(这适用于所有 Tornado 库,而不仅仅是 Motor)从 "inserting a document" 部分开始。
您可以非常轻松地在 mongodb 上创建索引(即使在空集合上)使用
field_name
和 direction
.
field_name
: can be any field on which you want to create the index.
direction
: can be any one from these values:1
,-1
,2dsphere
,text
orhashed
Refer MotorCollection Doc for details
在下面的代码中,我尝试使用 motor
库和 python
创建索引。
db.collection_name.create_index([("field_name", 1)] # To create ascending index
db.collection_name.create_index([("geoloc_field_name", "2dsphere")] # To create geo index
db.collection_name.create_index([("field_name", "text")] # To create text based index