MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB thêm các trường mới có tên với giá trị biến

Vì vậy, ý tưởng là:

  1. Nhóm các tài liệu theo deliveryDayplate.name để lấy tổng của plate.quantity .
  2. Nhóm lại kết quả ở trên theo name để tạo một mảng [{ k: "", v: "" }] định dạng.
  3. Kết hợp { k: "plate", v: { name: "$_id" } } vào mảng trên.
  4. Bây giờ chuyển đổi array vào đối tượng bằng cách sử dụng $ arrayToObject .

Giải pháp trong sân chơi Mongo . Hãy thử điều này:

db.testCollection.aggregate([
    {
        $group: {
            _id: {
                dDate: "$deliveryDay",
                name: "$plate.name"
            },
            sumOfQty: { $sum: "$plate.quantity" }
        }
    },
    {
        $group: {
            _id: "$_id.name",
            array: {
                $push: {
                    k: "$_id.dDate",
                    v: "$sumOfQty"
                }
            }
        }
    },
    {
        $addFields: {
            array: {
                $concatArrays: ["$array", [{ k: "plate", v: { name: "$_id" } }]]
            }
        }
    },
    {
        $replaceRoot: {
            newRoot: { $arrayToObject: "$array" }
        }
    }
]);

Đầu ra

/* 1 */
{
    "2021-01-16" : 2,
    "plate" : {
        "name" : "pizza"
    }
},

/* 2 */
{
    "2021-01-14" : 1,
    "2021-01-16" : 3,
    "plate" : {
        "name" : "pasta"
    }
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Các trường bổ sung để đăng ký tài khoản passport-local-mongoose?

  2. Làm cách nào để xóa các mục trùng lặp khỏi một mảng?

  3. MongoDB với C # - truy vấn với vị từ được tạo động

  4. Tại sao tôi nhận được pymongo.cursor.Cursor khi cố gắng truy vấn db mongodb của mình qua pymongo?

  5. Độ sâu tối đa của tài liệu nhúng được phép trong MongoDb là bao nhiêu?