db.posts.find("this.text.indexOf('Hello') > 0") 但是对于 pymongo,当执行以下命令时: for post-6ren">
gpt4 book ai didi

python - 是否可以将 "find"方法与 "javascript"查询一起用于 pymongo?

转载 作者:可可西里 更新时间:2023-11-01 09:25:17 24 4
gpt4 key购买 nike

对于 Mongo,可以使用以下内容:

> db.posts.find("this.text.indexOf('Hello') > 0")

但是对于 pymongo,当执行以下命令时:

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

发生错误。

我认为Full Text Search in Mongo在此示例中是更好的方法,但是是否可以将“查找”方法与“javascript”查询一起用于 pymongo?

最佳答案

你是对的 - 你通过使用 $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] http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D

[2] http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo

关于python - 是否可以将 "find"方法与 "javascript"查询一起用于 pymongo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9208578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com