2013-07-19 78 views
0

我有以下代碼用於檢索MongoDB中恰好具有按位標誌「狀態」的消息,這就是爲什麼我使用內置的BsonJavaScript功能來過濾這些記錄。即使語句使用JavaScript語法進行查詢評估,該語句是否會嘗試在ToUserId或Status字段上使用索引?MongoDB中的BsonJavaScript可以索引嗎?

public long NewMessageCount 
{ 
    get 
    { 
     var script = CreateScript("Status", MessageStatus.Unread); 
     return MongoConnectionHandler.MongoCollection.Count(Query.Where(script));  
    } 
} 

public string ToUserId = "51e8dd21d84513129c644fa6"; 
public string CreateScript(string field, MessageStatus filter) 
{ 
    return String.Format("this.ToUserId == '{0}' && (this.{1} & {2}) == {3}", ToUserId, field, (int)filter); 
} 

回答

1

按上$where文檔作爲MongoDB的2.4:

$where evaluates JavaScript and cannot take advantage of indexes. 

我會鼓勵你在MongoDB的問題跟蹤,這是按位查詢操作功能要求觀看/給予好評SERVER-3518

除了將標誌複製到不需要按位查詢的布爾字段或使用效率低下的查詢之外,暫時還沒有一個很好的解決方法。

相關問題