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

Truy vấn MongoDB sắp xếp theo tổng đối tượng chỉ định trong mảng lồng nhau

Sử dụng $unwind, $group với $cond để đếm số lần giá trị 10 xuất hiện, sau đó $sort giảm dần. Tạo collection:

> db.demo189.insertOne({
  "_id": 100,
  "List": [ { "Value": 10 }, { "Value": 20 }, { "Value": 10 } ]
});
{ "acknowledged": true, "insertedId": 100 }
> db.demo189.insertOne({
  "_id": 101,
  "List": [ { "Value": 10 }, { "Value": 10 }, { "Value": 10 } ]
});
{ "acknowledged": true, "insertedId": 101 }

Hiển thị document.

Pipeline aggregate: tách mảng, nhóm đếm số Value=10, sắp xếp giảm dần, giữ lại mảng gốc:

> db.demo189.aggregate([
  { "$unwind": "$List" },
  { "$group": {
    "_id": "$_id",
    "total": {
      "$sum": {
        "$cond": {
          "if": { "$eq": ["$List.Value", 10] },
          "then": 1,
          "else": 0
        }
      }
    },
    "List": { "$push": { "Value": "$List.Value" } }
  }},
  { "$sort": { "total": -1 } },
  { "$project": { "List": 1 } }
])

Kết quả (document _id:101 có 3 lần Value=10 lên đầu):

{ "_id": 101, "List": [ { "Value": 10 }, { "Value": 10 }, { "Value": 10 } ] }
{ "_id": 100, "List": [ { "Value": 10 }, { "Value": 20 }, { "Value": 10 } ] }