2015-05-18 37 views
0

我需要搜索另一個對象內的屬性的存在。 集合包含看起來像文件:

"properties": { 
    "source": { 
     "a/name": 12837, 
     "a/different/name": 76129 
    } 
} 

正如你可以看到下面的查詢字符串的一部分是從一個變量。

與JohnnyHK(見mongo query - does property exist?獲取更多信息),我有一個做工程的查詢一些幫助如下:

var name = 'a/name'; 
var query = {}; 
query['properties.source.' + name] = {$exists: true}; 
collection.find(query).toArray(function... 

現在我要看看我是否可以索引來提高集合這個查詢的性能。

我沒有線索如何做到這一點,或者如果它甚至可以爲此編制索引。

對此提出建議?

回答

1

2件事發生在這裏。

首先,您可能正在尋找稀疏索引。

http://docs.mongodb.org/manual/core/index-sparse/

你的情況可能是在「properties.source.a /名稱」字段稀疏索引。在字段上進行索引將顯着提高查詢查詢時間。

db.yourCollectionName.createIndex({ "properties.source.a/name": 1 }, { sparse: true })

第二件事。總是當你想知道你的查詢是快/慢時,使用mongo控制檯,運行你的查詢和結果調用解釋方法。

db.yourCollectionName.find(query).explain(); 多虧了它,你就會知道你的查詢是否使用索引與否,它有多少個文件,以完成查詢和一些其他有用的信息進行檢查。

+0

有趣的是,只是在包含數組的字段(properties.source)的索引上顯着減少了查詢時間。我猜這個索引創建了一個多鍵索引(根據doco),如果我使用稀疏索引,那麼執行時間會顯着增加。感謝您的幫助,它讓我研究了各種索引方法。 – RoyHB