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

MongoDB, Số lượng nhiều (có $ tồn tại)

Bạn đã có ý tưởng cơ bản đúng nhưng $ vẫn tồn tại là một điều kiện truy vấn nên chỉ witin hợp lệ $ match . Những gì bạn muốn là mã $ ifNull về cơ bản thực hiện điều tương tự:

db.mycollection.aggregate( [
    { "$group": {
        "_id" : { "user_id": "$user_id" },
        "requestA_count": { "$sum": {
            "$cond": [ { "$ifNull": ["$requestA", false] }, 1, 0 ]
        } },
        "requestB_count": { "$sum": {
            "$cond": [ { "$ifNull": ["$requestB", false] }, 1, 0 ]
        } },
        "requestC_count": { "$sum": {
            "$cond": [ { "$ifNull": ["$requestC", false] }, 1, 0 ]
        } },
    } },
    { "$project": {
        "_id": 0,
        "user_id": "$_id.user_id",
        "requestA_count": 1,
        "requestB_count": 1,
        "requestC_count": 1
    } }
] );

Vì vậy, $ ifNull hoặc trả về giá trị hiện tại của trường nếu nó tồn tại hoặc đối số "bên phải" được trả về nếu nó không tồn tại. Giá trị trả về khác với false được hiểu là true (tất nhiên trừ khi giá trị thực sự là sai).

Về cơ bản, điều này cung cấp cho bạn cùng một chức năng kiểm tra logic về sự tồn tại của một thuộc tính trong tài liệu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose, sắp xếp dựa trên khóa nước ngoài / dân cư

  2. Đồng bộ hóa cơ sở dữ liệu mongo trên các máy chủ khác nhau

  3. Nhận bản ghi MongoDB mới nhất theo trường ngày giờ

  4. Làm thế nào để đảm bảo một cuộc gọi không đồng bộ được thực thi trước khi trả về từ một hàm trong Mongoose?

  5. Sau gói sao băng, node.js đang NGHE nhưng không hiển thị tại localhost