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

Làm cách nào để sử dụng các toán tử tổng hợp trong một đối sánh $ trong MongoDB (ví dụ:$ year hoặc $ dayOfMonth)?

Như bạn đã tìm thấy, bạn không thể $ đối sánh trên các trường không có trong tài liệu (nó hoạt động giống hệt như cách tìm hoạt động) và nếu bạn sử dụng $ project trước thì bạn sẽ mất khả năng sử dụng các chỉ mục.

Thay vào đó, những gì bạn có thể làm là kết hợp những nỗ lực của mình như sau:

{
    aggregate: 'posts',
    pipeline: [
         {$match: {
             created_date : 
                  {$gte:{$date:'2012-09-01T04:00:00Z'}, 
                  $lt:  {date:'2012-10-01T04:00:00Z'} 
                  }}
             }
         },
         {$group:
             {_id: '0',
              totalComments:{$sum:'$comments'}
             }
          }
    ]
 }

Ở trên chỉ cung cấp cho bạn tổng hợp của tháng 9, nếu bạn muốn tổng hợp cho nhiều tháng, bạn có thể lấy ví dụ:

{
    aggregate: 'posts',
    pipeline: [
         {$match: {
             created_date : 
                  { $gte:'2012-07-01T04:00:00Z', 
                    $lt: '2012-10-01T04:00:00Z'
                  }
         },
         {$project: {
              comments: 1,
              new_created: {
                        "yr" : {"$year" : "$created_date"},
                        "mo" : {"$month" : "$created_date"}
                     }
              }
         },
         {$group:
             {_id: "$new_created",
              totalComments:{$sum:'$comments'}
             }
          }
    ]
 }

và bạn sẽ nhận lại được những thứ như:

{
    "result" : [
        {
            "_id" : {
                "yr" : 2012,
                "mo" : 7
            },
            "totalComments" : 5
        },
        {
            "_id" : {
                "yr" : 2012,
                "mo" : 8
            },
            "totalComments" : 19
        },
        {
            "_id" : {
                "yr" : 2012,
                "mo" : 9
            },
            "totalComments" : 21
        }
    ],
    "ok" : 1
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo sắp xếp theo một điều kiện được tính toán

  2. Cách bảo mật cơ sở dữ liệu nguồn mở của bạn với ClusterControl

  3. mongo.so:> ký hiệu không xác định:php_json_encode trong Không xác định trên dòng 0. Sau khi cài đặt trình điều khiển mongo cho php

  4. Kích thước batchSize mặc định trong pymongo là gì?

  5. Cú pháp kéo MongoDB $