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

Thực hiện câu lệnh chữ hoa chữ thường trong khung tổng hợp mongodb

cái tương ứng với câu lệnh SQL "case" trong khuôn khổ tổng hợp, là toán tử $ cond (xem hướng dẫn sử dụng). Các câu lệnh $ cond có thể được lồng vào nhau để mô phỏng "when-then" và "else", nhưng tôi đã chọn một cách tiếp cận khác, vì nó dễ đọc hơn (và để tạo, xem bên dưới):Tôi sẽ sử dụng toán tử $ concat để viết chuỗi phạm vi, sau đó đóng vai trò là khóa nhóm.

Vì vậy, đối với bộ sưu tập đã cho:

db.xx.find()
{ "_id" : ObjectId("514919fb23700b41723f94dc"), "name" : "A", "timespent" : 100 }
{ "_id" : ObjectId("514919fb23700b41723f94dd"), "name" : "B", "timespent" : 200 }
{ "_id" : ObjectId("514919fb23700b41723f94de"), "name" : "C", "timespent" : 300 }
{ "_id" : ObjectId("514919fb23700b41723f94df"), "name" : "D", "timespent" : 400 }
{ "_id" : ObjectId("514919fb23700b41723f94e0"), "name" : "E", "timespent" : 500 }

tổng hợp (mã cứng) trông như thế này:

db.xx.aggregate([
  { $project: {
    "_id": 0,
    "range": {
      $concat: [{
        $cond: [ { $lte: ["$timespent", 250] }, "range 0-250", "" ]
      }, {
        $cond: [ { $and: [
          { $gte: ["$timespent", 251] }, 
          { $lt:  ["$timespent", 450] } 
        ] }, "range 251-450", "" ]
      }, {
        $cond: [ { $and: [
          { $gte: ["$timespent", 451] }, 
          { $lt:  ["$timespent", 650] } 
        ] }, "range 450-650", "" ]
      }]
    }
  }},
  { $group: { _id: "$range", count: { $sum: 1 } } },
  { $sort: { "_id": 1 } },
]);

và kết quả là:

{
    "result" : [
        {
            "_id" : "range 0-250",
            "count" : 2
        },
        {
            "_id" : "range 251-450",
            "count" : 2
        },
        {
            "_id" : "range 450-650",
            "count" : 1
        }
    ],
    "ok" : 1
}

Để tạo lệnh tổng hợp, bạn phải tạo phép chiếu "phạm vi" dưới dạng đối tượng JSON (hoặc bạn có thể tạo một chuỗi và sau đó sử dụng JSON.parse (string))

Trình tạo có dạng như sau:

var ranges = [ 0, 250, 450, 650 ];
var rangeProj = {
  "$concat": []
};

for (i = 1; i < ranges.length; i++) {
  rangeProj.$concat.push({
    $cond: {
      if: {
        $and: [{
          $gte: [ "$timespent", ranges[i-1] ]
        }, {
          $lt: [ "$timespent", ranges[i] ]
        }]
      },
      then: "range " + ranges[i-1] + "-" + ranges[i],
      else: ""
    }
  })
}

db.xx.aggregate([{
  $project: { "_id": 0, "range": rangeProj }
}, {
  $group: { _id: "$range", count: { $sum: 1 } }
}, {
  $sort: { "_id": 1 }
}]);

sẽ trả về kết quả tương tự như trên.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bắt đầu:Tạo giao diện io.Writer để đăng nhập vào cơ sở dữ liệu mongodb

  2. MongoDB $ strLenBytes

  3. Cập nhật hàng loạt tài liệu trong MongoDB

  4. Cách sử dụng $ regex trong truy vấn tổng hợp mongodb trong $ match

  5. Meteor:mã thoát mongo không mong muốn 100