我收藏有超過100萬的文件是極其緩慢。每個文檔的結構是相同的,看起來像這樣:
{_id: "LiTC4psuoLWokMPmY", number: "12345", letter: "A", extra: [{eid:"jAHBSzCeK4SS9bShT", value: "Some text"}]}
所以,你可以看到,我的extra
字段是包含小對象的數組。我試圖儘可能多地插入這些對象(直到我接近16MB的文檔限制)。這些對象通常出現在集合中大多數文檔的extra
數組中。所以我通常擁有數十萬個相同的物體。
我對extra
陣列中eid
密鑰的索引。我用這個創建這個索引:
db.collectionName.createIndex({"extra.eid":1})
問題
我想算extra
Field對象存在的集合中有多少。我正在通過使用這樣做:
db.collectionName.find({extra: {eid: "jAHBSzCeK4SS9bShT"}}).count()
在開始時,上面的查詢是非常快的。但是每當extra
數組變大一點(超過20個對象)時,它變得非常慢。
3-4對象,只需不到100毫秒,但是當它變得更大,它需要更多的時間。有50個物體需要6238毫秒。
問題
- 這究竟是爲什麼?
- 如何使此過程更快?
- 有沒有其他方式可以做到這一過程,但速度更快?
考慮爲「額外」創建一個索引。 –
@FelipeSulser不幸的是,這是不可能的,因爲索引鍵太大。 – stackyname
以更快的速度使用聚合工作,因爲我不認爲使用find和count是正確的方法。例如: db.collectionName.aggregate({$ group:{_id:「$ extra.eid」,count:{$ sum:1}}}); –