我有一個樹狀模式,指定一個父母的集合和一個孩子的集合。如何加快MongoDB中的MongoDB查詢速度?
孩子的集合可能會有數以百萬計的文檔 - 其中每個文檔都包含少量數據,並且對其所屬的父類的引用存儲爲字符串(也許是我的第一個錯誤)。
收集的父母是小得多,但可能仍然在數以萬計,並會隨着時間的推移慢慢增長。一般來說,單親可能只有10個孩子,或多達5萬(可能更多,但不太可能)。
單個子文檔可能是這個樣子:
{
_id: ObjectId("507f191e810c19729de860ea"),
info: "Here's some info",
timestamp: 1234567890.0,
colour: "Orange",
sequence: 1000,
parent: "12a4567b909c7654d212e45f"
}
其相應父記錄(其中居住在一個單獨的集合)可能是這個樣子:
{
_id: ObjectId("12a4567b909c7654d212e45f")
info: "Blah",
timestamp: 1234567890.0
}
我的貓鼬查詢(其中包含請求中的父ID)如下所示:
/* GET all children with the specified parent ID */
module.exports.childrenFromParent = function(req, res) {
parentID = req.params.parentID;
childModel.find({
"parentid": parentID
}).sort({"sequence": "asc"}).exec(
function(err, children) {
if (!children) {
sendJSONResponse(res, 404, {
"message": "no children found"
});
return;
} else if (err) {
sendJSONResponse(res, 404, err);
return;
}
sendJSONResponse(res, 200, children);
}
);
};
因此基本上發生了什麼事情是查詢必須搜索具有與提供的ID匹配的父項的任何文檔的兒童的整個集合。
我目前將這個父ID作爲字符串保存在子集合模式(上面代碼中的childModel)中,這可能是一個壞主意,但是,我的API在請求中提供了父ID作爲字符串。
如果任何人有任何想法可以修復我的模式或更改查詢以提高性能,將不勝感激!
你對「父」字段有任何索引嗎? – risyasin
@risyasin不,沒有。 – Novark
我建議你在父項上創建一個索引來幫助加快查詢速度。有關更多信息,請參閱https://docs.mongodb.org/v3.0/core/indexes-introduction/。 –