2011-12-06 36 views
1

我在文檔中的集合中有一些值。例如,我的鑰匙range可以是:如何使用MongoDB搜索部分文本?

  • 10 - 29
  • 30 - 39
  • 40 - 49

這些都是字符串。我想以某種方式搜索(在MongoDB中)以10開頭並以49結尾的字符串。我怎樣才能做到這一點?

我知道我應該有這些數字,但這是不可能的,由於如何創建系統的結構。

謝謝

回答

2

你是對的,最好的選擇將這些模型作爲數字。但是,我最好(唯一)的替代建議是使用正則表達式搜索。 請參閱here瞭解關於mongo的正則表達式搜索的文檔以及創建範圍表達式的here

根據可能的範圍內,您的查詢會是這樣

db.collection.find({ range : /[1-4][0-9] - [1-4][0-9]/ }); 

符合你的範圍選項中指定[10 - 29, 30 - 39, 40 - 49]。請注意,這也與49 - 10相匹配,因此如果在問題中沒有提及任何排除項,則需要強化該表達式。

注意正則表達式查詢的性能成本,重塑和使用內置的$gt $lt函數肯定是可取的。

祝你好運!

+2

確保在可能的情況下使用rooted正則表達式(即以'^'開頭),否則索引不起作用。 – mnemosyn

+0

@mnemosyn很好的理解,重要的一點是瞭解你的索引何時被使用。 – markdsievers