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

Mongodb, $ sum với điều kiện

Từ tài liệu Mongo hành vi $ sum

chúng ta có thể $push tất cả diện tích và độ dài cho mảng và so sánh count với độ dài của mảng

db.n.aggregate (

    [ 
        {
            $group: {
                _id: { name: "$name" }, 
                count: { $sum: 1 }, 
                area : {$push : "$area"}, 
                length : {$push : "$length"} } 
        },
        {
            $project:{
                _id: "$_id",
                count: "$count",
                summarizedLength: { $cond : [ {$eq : [ "$count", {$size : "$length"} ]} , { $sum : ["$length"] }, "not all numbers" ] },
                summarizedArea: { $cond : [ {$eq : [ "$count", {$size : "$area"} ]} , { $sum : ["$area"] }, "not all numbers" ] },
            }
        }
    ] 
)

hoặc, chúng tôi có thể đếm số lượng defined chiều dài và diện tích, cùng với tổng số count , nếu số đếm khớp thì tất cả các số khác một số không xác định.

Để kiểm tra chặt chẽ loại, trong trường hợp nếu diện tích và chiều dài có thể chứa dữ liệu không phải số, thay vì undefined chúng ta có thể làm $type kiểm tra

db.n.aggregate(
    [
        {
            $group: {
                _id: { name: "$name" },
                count: { $sum: 1 },
                areaCount : { $sum : { $cond : [ {$eq : [ "$area", undefined ]} , 0, 1 ] } },
                lengthCount : { $sum : { $cond : [ {$eq : [ "$length", undefined ]} , 0, 1 ] } },
                summarizedLength: { $sum: "$length"  },
                summarizedArea: { $sum: "$area"  }
            }
        },
        {
            $project : {
                _id : "$_id",
                count: "$count",
                summarizedLength: { $cond : [ {$eq : [ "$count", "$lengthCount" ]} , "$summarizedLength", "not all numbers" ] },
                summarizedArea: { $cond : [ {$eq : [ "$count", "$areaCount" ]} , "$summarizedArea", "not all numbers" ] },
            }
        }
    ]
).pretty()

đầu ra

{
    "_id" : {
        "name" : "abc"
    },
    "count" : 2,
    "summarizedLength" : 30,
    "summarizedArea" : "not all numbers"
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cần đề xuất về thiết kế đề xuất nghệ sĩ

  2. Làm cách nào để kích hoạt libmongoc ssl trong PHP 7 cho kết nối Mongodb?

  3. NestJS:Cách triển khai xác thực người dùng dựa trên phiên

  4. Dữ liệu mùa xuân MongoDB loại bỏ POJO's

  5. So sánh hiệu suất MongoDB trên đám mây công cộng:AWS, Azure &DigitalOcean