MongoDB查找和删除算法复杂性

meh*_*123 3 algorithm big-o mongodb

MongoDB查找操作和删除操作的大复杂性是什么?假设我的MongoDB集合中有n个字符串-'abc',并且我使用abc.find()查询集合'abc'以获取abc中的所有元素,那么此操作的运行时复杂度是多少?

另外,如果我做abc.remove({“ string”:s},考虑到我的集合中有n个元素,那么运行时的复杂性又是什么呢?

Chr*_*phe 5

你的问题取决于指数是否可用于查询条件您的find与否。如果可以使用索引,则还取决于索引类型

  • 如果无法使用索引,则可以下注O(n)。

  • 在大多数情况下,索引是b树,在这种情况下,您可以期望O(log n)。

  • 在特殊情况下,可以使用哈希索引,并且只要您的查询查找确切的值,它就可以是O(1)。

您可以使用abc.explain()ton分析查询执行计划(COLLSCANO(1)与IXSCAN特定于索引类型的big-O)。

为了删除集合中的某个项目,必须更新所有索引。从上面可以推断,它很大程度上取决于引用此集合的索引数量和类型。

  • 根据https://docs.mongodb.com/v3.2/reference/explain-results/,上述内容可能有错字,`COLSCAN`将为O(n),而FETCH将为O(1)。在进行解释之前,似乎在说明书中正确地指出了这一点。 (2认同)