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

Gom nhóm document trùng lặp trong MongoDB với aggregate

Để gom nhóm các document trùng lặp (cùng giá trị trường), sử dụng aggregate() với $group.

Tạo collection với tên trùng lặp

> db.demo501.insertOne({"Name":"Chris"});
> db.demo501.insertOne({"Name":"Bob"});
> db.demo501.insertOne({"Name":"Chris"});
> db.demo501.insertOne({"Name":"John"});
> db.demo501.insertOne({"Name":"Chris"});
> db.demo501.insertOne({"Name":"John"});
> db.demo501.insertOne({"Name":"David"});

Hiển thị dữ liệu gốc (7 document)

> db.demo501.find();

Kết quả: Chris(3), Bob(1), John(2), David(1)

Aggregate group by Name lấy giá trị duy nhất

> db.demo501.aggregate([ { $group: { _id: "$Name" } } ])

Kết quả (4 nhóm duy nhất):

{ "_id" : "David" }
{ "_id" : "John" }
{ "_id" : "Bob" }
{ "_id" : "Chris" }

Giải thích:

  • _id: "$Name": Khóa nhóm là giá trị trường Name
  • Mỗi giá trị Name riêng biệt tạo thành 1 nhóm
  • Kết quả chỉ chứa _id (giá trị Name), không có count

Bổ sung đếm số lần xuất hiện:

> db.demo501.aggregate([
  { $group: { _id: "$Name", count: { $sum: 1 } } },
  { $sort: { count: -1 } }
])

Kết quả có thống kê:

{ "_id": "Chris", "count": 3 }
{ "_id": "John", "count": 2 }
{ "_id": "Bob", "count": 1 }
{ "_id": "David", "count": 1 }

Ứng dụng: Tìm duplicate, deduplication, thống kê tần suất, distinct values.