MongoDB “count()” 非常慢。我们如何解决呢?


可以使用 ensureIndex() 来提升 MongoDB 中 count() 方法的性能。为了理解这个概念,我们使用文档创建集合。创建带文档集合的查询如下 −

> db.countPerformanceDemo.insertOne({"StudentName":"John","StudentCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8ebcf82f684a30fbdfd55f")
}
> db.countPerformanceDemo.insertOne({"StudentName":"Mike","StudentCountryName":"UK"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8ebd042f684a30fbdfd560")
}
> db.countPerformanceDemo.insertOne({"StudentName":"David","StudentCountryName":"AUS"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8ebd112f684a30fbdfd561")
}
> db.countPerformanceDemo.insertOne({"StudentName":"Carol","StudentCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8ebd1a2f684a30fbdfd562")
}
> db.countPerformanceDemo.insertOne({"StudentName":"Bob","StudentCountryName":"UK"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8ebd212f684a30fbdfd563")
}

> db.countPerformanceDemo.insertOne({"StudentName":"David","StudentCountryName":"UK"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8ebd9a2f684a30fbdfd564")
}
> db.countPerformanceDemo.insertOne({"StudentName":"David","StudentCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8ebd9e2f684a30fbdfd565")
}

通过使用 find() 方法显示集合中的所有文档。查询如下 −

> db.countPerformanceDemo.find().pretty();

以下是输出 −

{
   "_id" : ObjectId("5c8ebcf82f684a30fbdfd55f"),
   "StudentName" : "John",
   "StudentCountryName" : "US"
}
{
   "_id" : ObjectId("5c8ebd042f684a30fbdfd560"),
   "StudentName" : "Mike",
   "StudentCountryName" : "UK"
}
{
   "_id" : ObjectId("5c8ebd112f684a30fbdfd561"),
   "StudentName" : "David",
   "StudentCountryName" : "AUS"
}
{
   "_id" : ObjectId("5c8ebd1a2f684a30fbdfd562"),
   "StudentName" : "Carol",
   "StudentCountryName" : "US"
}
{
   "_id" : ObjectId("5c8ebd212f684a30fbdfd563"),
   "StudentName" : "Bob",
   "StudentCountryName" : "UK"
}
{
   "_id" : ObjectId("5c8ebd9a2f684a30fbdfd564"),
   "StudentName" : "David",
   "StudentCountryName" : "UK"
}
{
   "_id" : ObjectId("5c8ebd9e2f684a30fbdfd565"),
   "StudentName" : "David",
   "StudentCountryName" : "US"
}

这里是对 count() 进行高性能形式的查询 −

> db.countPerformanceDemo.ensureIndex({"StudentName":1});
{
   "createdCollectionAutomatically" : false,
   "numIndexesBefore" : 1,
   "numIndexesAfter" : 2,
   "ok" : 1
}

现在,实现 count() 方法。它计算 StudentName 为”David”的记录

> db.countPerformanceDemo.find({"StudentName":"David"}).count();

以下是输出 −

3

更新日期: 2019 年 7 月 30 日

超过 1K 的浏览量

开启你的 职业生涯

完成课程认证

开始
广告