如何在生产代码中添加索引?我只找到了将其添加为命令而未嵌入完整代码的方法:
如果要为速度查询添加索引:
db.users.ensure_index(the_key)
所以我尝试将它添加到一个类中:
class Registration(BaseHandler):
def post(self):
# do stuff to get user information using the self.get_argument()
user={"all information":informations}
self.db.users.insert(user, w=1)
self.db.users.ensure_index(pseudo, commune)
但我得到这样的错误:
self.db.users.ensure_index(pseudo, commune)
File "build\bdist.win-amd64\egg\pymongo\collection.py", line 829, in ensure_index
return self.create_index(key_or_list, cache_for, **kwargs)
File "build\bdist.win-amd64\egg\pymongo\collection.py", line 740, in create_index
self.__name, name, cache_for)
File "build\bdist.win-amd64\egg\pymongo\connection.py", line 330, in _cache_index
expire = datetime.timedelta(seconds=cache_for) + now
TypeError: unsupported type for timedelta seconds component: unicode
我想在使用插入子文档时它将是相同的提示:
self.db.users.update({"email":email}, {"$push":{"produit_up":{"id":id, "namep":namep, "nombre":nombre}}})
self.db.users.ensure_index("product_up.namep") #????
答案 0 :(得分:2)
您的错误是将非整数作为cache_for
传递的结果,它告诉pymongo
缓存索引存在的事实需要多长时间。
我不知道代码中的psuedo
或commune
是什么,但ensure_index
中pymongo
的正确用法是ensure_index(key_or_list, cache_for=300, **kwargs)
。您可以在pymongo documentation中详细了解这一点,但要点是key_or_list
是一个命名键的字符串(是的,这可以包括您显示的子文档)或列表包含(键,方向)对的元组,其方向为pymongo.ASCENDING
或pymongo.DESCENDING
。
答案 1 :(得分:-1)
得到了答案:
的回答否否,ensureIndex与创建索引相同。它什么都不做 特别的,也许功能的名称真的有点奇怪 改为称为create_index。 由于Mongo没有预定义的模式(NoSQL),因此必须创建索引a 不同的SQL方式。建议的方式是通过客户端时 用户决定他们需要特定字段的索引。这是怎么回事 集合和客户使用它们时未创建的集合。 这个函数叫做ensureIndex()。 因此,在您的应用程序中只需要一次调用EnsureIndex()即可 应该是该索引的字段列表作为第一个参数和任何额外的 第二个参数的选项(如稀疏)。 管理员无需保持此索引的完整性, 不是一个月一次,但如果集群中出现问题,那么是的,有些 管理员可能需要工作才能重新制作索引。 我个人有一个索引文件,我每次加载我的应用程序时都会调用它们。 我希望这可以解决一些问题,