Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以使用;查找“;方法中使用了“;javascript";问pymongo?_Python_Mongodb_Pymongo - Fatal编程技术网

Python 是否可以使用;查找“;方法中使用了“;javascript";问pymongo?

Python 是否可以使用;查找“;方法中使用了“;javascript";问pymongo?,python,mongodb,pymongo,Python,Mongodb,Pymongo,对于Mongo,以下各项都可以: > db.posts.find("this.text.indexOf('Hello') > 0") for post in db.posts.find("this.text.indexOf('Hello') > 0"): print post['text'] 但对于pymongo,在执行以下操作时: > db.posts.find("this.text.indexOf('Hello') > 0") for post i

对于Mongo,以下各项都可以:

> db.posts.find("this.text.indexOf('Hello') > 0")
for post in db.posts.find("this.text.indexOf('Hello') > 0"):
    print post['text']
但对于pymongo,在执行以下操作时:

> db.posts.find("this.text.indexOf('Hello') > 0")
for post in db.posts.find("this.text.indexOf('Hello') > 0"):
    print post['text']
发生了错误


我认为在本例中使用“find”方法更好,但在pymongo中使用“javascript”查询时是否可以使用“find”方法?

您是正确的-您可以使用$where子句[1]在服务器端javascript中执行此操作:

db.posts.find({"$where": "this.text.indexOf('Hello') > 0"})
除切分设置外,其他所有设置都可以使用,但这样做的成本被视为禁止性的,因为您将检查集合中的所有文档,这就是为什么一般认为这不是一个好主意的原因

您还可以执行正则表达式搜索:

db.posts.find({'text':{'$regex':'Hello'}})
由于未锚定正则表达式,这也将执行完整集合扫描(例如,如果锚定正则表达式,则检查字段是否以值开头,并且该字段上是否有索引,则可以使用索引)

考虑到这两种方法的成本都很高,而且不能很好地执行或扩展,那么最好的方法是什么呢

您在[2]中给出的链接中描述的全文搜索方法效果良好。创建一个_keywords字段,该字段将关键字以小写形式存储在数组中,为该字段编制索引,然后您可以像这样进行查询:

db.posts.find({"_keywords": {"$in": "hello"});
这将扩展并利用一个指数,因此将表现出色


[1]

[2]