MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara mendapatkan hasil ini dengan agregat di mongoDB

Versi Mongo 3.4

$map untuk mengalikan harga &nilai item dan $reduce untuk menghitung jumlah harga &nilai item dan $reduce untuk menghitung jumlah harga biaya. $kurangi nilai dari pengurangan sebelumnya untuk mendapatkan jumlah akhir.

aggregate([{
    $project: {
        _id: 1,
        amount: {
            $subtract: [{
                $reduce: {
                    input: {
                        $map: {
                            input: "$items",
                            as: "item",
                            in: {
                                $multiply: ["$$item.value", "$$item.price"]
                            }
                        }
                    },
                    initialValue: 0,
                    in: {
                        $add: ["$$value", "$$this"]
                    }
                }
            }, {
                $reduce: {
                    input: "$costs.price",
                    initialValue: 0,
                    in: {
                        $add: ["$$value", "$$this"]
                    }
                }
            }]
        }

    }
}])

Versi Mongo 3.x

$proyek pertama untuk mengalikan nilai &harga item. Pengelompokan berikutnya untuk menghitung jumlah untuk bidang item dan biaya, yang akan menghasilkan satu nilai larik untuk setiap bidang item dan biaya dan tugas akhir hanya melihat nilai larik dari kedua larik dengan $arrayElemAt untuk mengurangi nilai satu sama lain.

aggregate(
    [{
        $project: {
            vpItems: {
                $map: {
                    input: "$items",
                    as: "item",
                    in: {
                        $multiply: ["$$item.value", "$$item.price"]
                    }
                }
            },
            costs: '$costs'
        }
    }, {
        $group: {
            _id: '$_id',
            vpItems: {
                $addToSet: {
                    $sum: '$vpItems'
                }
            },
            pCosts: {
                $addToSet: {
                    $sum: '$costs.price'
                }
            }
        }
    }, {
        $project: {
            _id: 1,
            amount: {
                $subtract: [{
                    $arrayElemAt: ["$vpItems", 0]
                }, {
                    $arrayElemAt: ["$pCosts", 0]
                }]
            }
        }
    }])

Versi Mongo 2.6

$unwind item dan grup untuk menghitung jumlah nilai yang dikembalikan dari mengalikan harga &nilai item dan $unwind biaya untuk menghitung jumlah harga &nilai item dan proyeksikan ke $kurangi nilai dari pengelompokan sebelumnya untuk menghitung jumlah akhir.

aggregate([{
      $unwind: '$items'
  }, {
      $group: {
          _id: '$_id',
          totalItems: {
              $sum: {
                  $multiply: ["$items.value", "$items.price"]
              }
          },
          costs: {
              $first: '$costs'
          }
      }
  }, {
      $unwind: '$costs'
  }, {
      $group: {
          _id: '$_id',
          totalItems: {
              $first: '$totalItems'
          },
          totalPrice: {
              $sum: '$costs.price'
          }
      }
  }, {
      $project: {
          _id: 1,
          amount: {
              $subtract: ['$totalItems', '$totalPrice']
          }
      }
  }])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tidak dapat terhubung ke Mongo DB melalui Spark

  2. Bagaimana saya harus merancang server DB &API saya untuk permainan papan iPhone multipemain berbasis giliran? (berpikir tentang nodejs, mongo, sofa, dll)

  3. Panduan untuk Penerapan &Pemeliharaan MongoDB Menggunakan Wayang:Bagian 1

  4. Bagaimana cara mengurutkan catatan MongoDB ketika tidak ada urutan pengurutan yang ditentukan?

  5. Laravel 5 Jumlah kolom yang dikalikan dengan fasih untuk mongo DB