我需要使用它的ID在mongodb中找到一个文档。此操作应该是如此之快。因此,我们需要获取具有给定ID的确切文档。有没有办法做到这一点。我是这里的初学者。因此,如果您能提供一些深入的答案,我将非常感谢您
答案 0 :(得分:1)
好的,你真的是一个初学者。
从现在开始您应该知道的第一件事 来自数据库的查询是通过查询数据库来完成的,其称为 搜索。
这只是意味着,当您想要从数据库中获取任何数据时,数据库引擎必须使用您提供的查询在数据库中进行搜索。
因此,我认为这足以使您知道,每当您要求(使用数据库查询)数据库从中提供一些记录时,它都会根据您提供的条件执行搜索,那么没关系
您使用单个唯一键或多个列的复杂组合或多个表的联接为条件提供条件
您的数据库不包含任何记录或数十亿条记录。
它必须在数据库中搜索。
所以上述解释适用,因为据我所知,我猜每个数据库。
现在要进入MongoDB
因此,参考以上说明,MongoDB引擎查询数据库以获取结果。
现在的主要问题是- 如何快速获得结果!
我认为那是您主要关心的问题。
所以查询速度(Search Speed)主要取决于两件事:
查询。
数据库中的记录数。
1。查询
影响因素有:
a。查询中使用的参数的性质-(建立索引或未建立索引)
如果在查询中使用Indexed parameters,它将始终是数据库的更快搜索操作。
例如,_id
字段默认由mongodb索引。因此,如果您仅使用_id
来搜索集合中的文档,将总是更快的搜索速度。
b。参数与运算符的组合
这是指用于查询的参数数量(参数越多,速度越慢)和您在查询中使用的查询运算符的种类(与管道simple query operator相比,aggregation query operators给出的结果更快)< / p>
c。阅读偏好设置
Read preference描述了MongoDB如何将读取操作路由到replica set的成员。它实际上描述了您对获取的数据的信任偏好。
上面是两个主要参数,但是有很多东西,例如:
您的收藏的模式
您对架构(特别是文档的数据类型)的理解
了解您使用的查询运算符。例如-何时使用$ or,$ and运算符以及何时使用$ in和$ nin运算符。
2。数据库中的记录数。
现在,当您在数据库中拥有大量数据时会发生这种情况,当然,如果使用单个数据库服务器,它将变得更慢,即,更多的记录会更慢。
在这种情况下,Sharding(群集)多个数据库服务器上的数据将为您提供更快的搜索性能。
MongoDB具有Mongos组件,它将把我们的查询路由到集群中的完美数据库服务器。为了执行这种路由,它使用config servers,该索引使用索引和Shard-Key存储有关我们集合的元数据。
因此,在分片环境中选择合适的分片键对于加快查询响应速度至关重要。
我希望这能使您了解各种参数实际上如何影响搜索。
我会在以后的时间里改善这个答案。
答案 1 :(得分:0)
它非常星光灿烂,您可以尝试以下操作:
var id = "89e6dd2eb4494ed008d595bd";
Model.findById(id, function (err, user) { ... } );
答案 2 :(得分:0)
猫鼬:
router.get("/:id", (req, res) => {
if (!mongoose.Types.ObjectId.isValid(req.params.id)) { // checking if the id is valid
return res.send("Please provide valid id");
}
var id = mongoose.Types.ObjectId(req.params.id);
Item.findById({ _id: id })
.then(item=> {
res.json(item);
})
.catch(err => res.status(404).json({ success: false }));
});