2012-04-20 57 views
35

如何查找數據庫中的所有對象,其中對象的字段包含子字符串?如何在Mongodb的字段中找到子字符串

如果該字段是一個集合的對象具有字符串值:

我想找到所有的分貝「數據庫」,其中A包含一個子說的對象「ABC DEF」。

我想:

db.database.find({A: {$regex: '/^*(abc def)*$/''}}) 

,但沒有奏效

UPDATE

一個真正的字符串(Unicode格式):

Sujet Commentaire sur Star Wars Episode III - La Revanche des Sith 1 

需要搜索所有參與星球大戰

db.test.find({A: {$regex: '^*(star wars)*$''}}) not wokring 
+1

作爲@derick指出,如果你需要查找「任何字符串」,你需要用'。*':'.'表示任何(單個)字符,'*'表示以前的任何數字(包括零)。 (星球大戰)* $'你會匹配「星球大戰星球大戰」,但不是「星球大戰很棒」。 – drevicko 2013-06-24 01:20:56

回答

39

取而代之的是:

db.database.find({A: {$regex: '/^*(abc def)*$/''}}) 

你應該這樣做:

db.database.find({A: /abc def/i }) 

^*是不是^和$是錨,而不是東西,是可重複的實際有效的語法。你可能意思是^。*這裏。但是沒有必要使用^。*,因爲它僅僅意味着「一切都跟隨在後面的字符」和(abc def)*意味着「abc def」的0或更多次,但它必須位於字符串的末尾,因爲你的$的。「我」在結尾是使其不區分大小寫。

+2

請注意,使用'^'有助於加快正則表達式查詢的速度,因爲索引僅在此格式中有效(請參閱http://docs.mongodb.org/manual/reference/operator/regex/上的頁面底部) – 2013-05-05 15:21:54

+0

正確如果我錯了,但是'^ *'有什麼意義?它不應該是'^。*'嗎?對我而言'^ *'讀出「零或多行的開頭」,其中只有一行,並且總是隻有一行,並且它在我看來喜歡它__不允許在行的開始和正則表達式的其餘部分之間的字符... – drevicko 2013-06-17 07:58:45

+0

@drevicko,你是對的。這是我的答案中的一個錯字。我澄清了它。 – Derick 2013-06-23 09:27:47

16

,只用字符串「星球大戰」和$regex將完成剩下的

db.test.find({A: {$regex: 'Star Wars'}}) 
相關問題