簡體   English   中英

用pymongo的“javascript”查詢可以使用“find”方法嗎?

[英]Is it possible to use “find” method with “javascript” query with pymongo?

使用Mongo,可以使用以下內容:

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

但是使用pymongo時,執行以下操作時:

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

發生了錯誤。

我認為Mongo中的全文搜索在這個例子中是更好的方法,但是可以使用“查找”方法和pymongo的“javascript”查詢嗎?

你是對的 - 你使用$ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM