Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Đếm nhanh số lần xuất hiện giá trị trong MongoDB với Index

Để tối ưu tốc độ đếm (count) cho trường thường xuyên lọc, hãy tạo index trên trường đó. Sau đó dùng find({field: value}).count() (hoặc countDocuments() mới).

Tạo index và dữ liệu

> db.demo311.ensureIndex({"Name":1});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
> db.demo311.insertOne({"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50cd01f8647eb59e562044") }
> db.demo311.insertOne({"Name":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50cd05f8647eb59e562045") }
> db.demo311.insertOne({"Name":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50cd06f8647eb59e562046") }
> db.demo311.insertOne({"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50cd0af8647eb59e562047") }
> db.demo311.insertOne({"Name":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50cd0df8647eb59e562048") }
> db.demo311.insertOne({"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50cd0ff8647eb59e562049") }

Xem dữ liệu

> db.demo311.find();
{ "_id" : ObjectId("5e50cd01f8647eb59e562044"), "Name" : "Chris" }
{ "_id" : ObjectId("5e50cd05f8647eb59e562045"), "Name" : "David" }
{ "_id" : ObjectId("5e50cd06f8647eb59e562046"), "Name" : "David" }
{ "_id" : ObjectId("5e50cd0af8647eb59e562047"), "Name" : "Chris" }
{ "_id" : ObjectId("5e50cd0df8647eb59e562048"), "Name" : "Bob" }
{ "_id" : ObjectId("5e50cd0ff8647eb59e562049"), "Name" : "Chris" }

Đếm số tài liệu Name="Chris"

> db.demo311.find({"Name":"Chris"}).count();
3

Lưu ý quan trọng:

  • ensureIndex đã cũ, dùng createIndex.
  • count() trên cursor đã deprecated, dùng countDocuments({Name:"Chris"}) hoặc estimatedDocumentCount() (cho toàn collection).
  • Index đơn trường (single field index) trên Name giúp query {Name: "Chris"} và count chạy rất nhanh nhờ index scan thay vì collection scan.