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

Thực hiện distinct trên nhiều trường trong MongoDB

Sử dụng $group với $addToSet trong aggregation framework. Tạo collection:

> db.distinctOnMultipleFieldsDemo.insertOne({"StudentFirstName": "Chris", "StudentAge": 21, "StudentCountryName": "US"});
{ "acknowledged": true, "insertedId": ObjectId("5cd2e518b64f4b851c3a13d7") }
> db.distinctOnMultipleFieldsDemo.insertOne({"StudentFirstName": "Robert", "StudentAge": 21, "StudentCountryName": "AUS"});
{ "acknowledged": true, "insertedId": ObjectId("5cd2e518b64f4b851c3a13d8") }
> db.distinctOnMultipleFieldsDemo.insertOne({"StudentFirstName": "Chris", "StudentAge": 22, "StudentCountryName": "UK"});
{ "acknowledged": true, "insertedId": ObjectId("5cd2e518b64f4b851c3a13d9") }
> db.distinctOnMultipleFieldsDemo.insertOne({"StudentFirstName": "David", "StudentAge": 24, "StudentCountryName": "AUS"});
{ "acknowledged": true, "insertedId": ObjectId("5cd2e518b64f4b851c3a13da") }

Hiển thị tất cả

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

Aggregation distinct nhiều trường

> db.distinctOnMultipleFieldsDemo.aggregate([
    {
        $group: {
            _id: 0,
            StudentFirstName: { $addToSet: '$StudentFirstName' },
            StudentAge: { $addToSet: '$StudentAge' },
            StudentCountryName: { $addToSet: '$StudentCountryName' }
        }
    }
]);

Kết quả:

{
    "_id": 0,
    "StudentFirstName": ["David", "Robert", "Chris"],
    "StudentAge": [24, 22, 21],
    "StudentCountryName": ["UK", "AUS", "US"]
}

Giải thích: $addToSet chỉ thêm giá trị chưa có trong mảng kết quả. _id: 0 gom nhóm tất cả tài liệu thành một nhóm duy nhất.