我有一个树状模式,指定一个父母的集合和一个孩子的集合。如何加快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/。 –