2011-03-31 16 views

回答

23

假設你有一個包含tag場文檔,你想搜索就可以了

Tags 
{ 
    tag, 
    ... 
} 

第一種選擇是使用正則表達式(但它的工作緩慢,因爲@RestRisiko說):

db.tags.find({ "tag" : { "$regex" : "C#", "$options" : "-i" } }) 

第二個選項是創建另一個,小寫場(和MongoDB中它最好的方式):

Tags 
{ 
    tag, 
    tagLower, 
    .. 
} 

並使用find像往常一樣:

db.tags.find({ "tagLower" : "c#"}) 

它的運行速度更快,因爲上面的代碼可以使用索引搜索。

+0

如果標籤包含問號,它將不起作用。 – 2015-12-23 21:02:53

8

您必須標準化要查詢的數據。對大小寫不敏感的搜索使用正則表達式也可以,但不會使用索引。所以你唯一的選擇是正常化。如果您需要保留原始狀態,則需要對數據進行非規格化並將標準化值存儲在文檔的專用列中。

+0

+1對於正確的答案,我只是在我的答案中添加了示例。 – 2011-03-31 13:42:32

2

與Node.js一起使用時,最好在查詢中構建一個RegEx對象。

Room.findOne({'name': new RegExp(roomName, 'i')}, {}, function(err, room) { 
... 
0

使用正則表達式匹配如下。 '我'顯示不區分大小寫。

var collections = mongoDatabase.GetCollection("Abcd"); 

var queryA = Query.And(
     Query.Matches("strName", new BsonRegularExpression("MSID", "i")), 
     Query.Matches("strVal", new BsonRegularExpression("154800", "i"))); 

var queryB = Query.And(
     Query.Matches("strName", new BsonRegularExpression("Operation","i")), 
     Query.Matches("strVal", new BsonRegularExpression("8221", "i"))); 

var getA = collections.Find(queryA); 
var getB = collections.Find(queryB);