Computer >> Máy Tính >  >> Lập trình >> MongoDB

Nhận tài liệu MongoDB với thuộc tính tối đa cho mỗi nhóm trong một bộ sưu tập?

Bạn có thể nhận các tài liệu có thuộc tính tối đa cho mỗi nhóm trong một bộ sưu tập bằng cách sử dụng toán tử $ sort cùng với câu lệnh $ group.

Để hiểu thêm về khái niệm, chúng ta hãy tạo một bộ sưu tập với tài liệu. Truy vấn để tạo một bộ sưu tập với tài liệu như sau -

> db.maxAttributePerGroup.insertOne({"StudentFirstName":"John","StudentLastName":"Smith
   ","StudentAge":29,"StudentId":10});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c76ee341e9c5dd6f1f78277")
}
> db.maxAttributePerGroup.insertOne({"StudentFirstName":"Carol","StudentLastName":"Taylo
   r","StudentAge":19,"StudentId":10});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c76ee4e1e9c5dd6f1f78278")
}
> db.maxAttributePerGroup.insertOne({"StudentFirstName":"Adam","StudentLastName":"Smit
   h","StudentAge":34,"StudentId":20});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c76ee631e9c5dd6f1f78279")
}
> db.maxAttributePerGroup.insertOne({"StudentFirstName":"Bob","StudentLastName":"Taylor"
   ,"StudentAge":58,"StudentId":20});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c76ee791e9c5dd6f1f7827a")
}

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find (). Truy vấn như sau -

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

Đầu ra

{
   "_id" : ObjectId("5c76ee341e9c5dd6f1f78277"),
   "StudentFirstName" : "John",
   "StudentLastName" : "Smith",
   "StudentAge" : 29,
   "StudentId" : 10
}
{
   "_id" : ObjectId("5c76ee4e1e9c5dd6f1f78278"),
   "StudentFirstName" : "Carol",
   "StudentLastName" : "Taylor",
   "StudentAge" : 19,
   "StudentId" : 10
}
{
   "_id" : ObjectId("5c76ee631e9c5dd6f1f78279"),
   "StudentFirstName" : "Adam",
   "StudentLastName" : "Smith",
   "StudentAge" : 34,
   "StudentId" : 20
}
{
   "_id" : ObjectId("5c76ee791e9c5dd6f1f7827a"),
   "StudentFirstName" : "Bob",
   "StudentLastName" : "Taylor",
   "StudentAge" : 58,
   "StudentId" : 20
}

Đây là truy vấn để lấy tài liệu có thuộc tính tối đa cho mỗi nhóm trong một bộ sưu tập -

> db.maxAttributePerGroup.aggregate([
   ... {"$sort":{"StudentId":1,"StudentAge":-1}},
   ... {$group:{
   ... "_id":"$StudentId",
   ... "StudentAge":{"$first":"$StudentAge"},
   ... "StudentFirstName":{"$first":"$StudentFirstName"},
   ... "StudentLastName":{"$first":"$StudentLastName"}
... }} ]).pretty();

Đầu ra

{
   "_id" : 20,
   "StudentAge" : 58,
   "StudentFirstName" : "Bob",
   "StudentLastName" : "Taylor"
}
{
   "_id" : 10,
   "StudentAge" : 29,
   "StudentFirstName" : "John",
   "StudentLastName" : "Smith"
}