Python 是否可以使用;查找“;方法中使用了“;javascript";问pymongo?
对于Mongo,以下各项都可以: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
> 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]