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

MongoDB:Sự tồn tại của một khóa lồng nhau

Với phiên bản MongoDb> =3.6, bạn có thể tận dụng toán tử $expr trong truy vấn của bạn và sử dụng $objectToArray toán tử để chuyển đổi đối tượng động thành một mảng, lọc mảng cho trường giá trị công việc bằng cách sử dụng $ifNull là toán tử điều kiện.

Ví dụ sau minh họa cách tiếp cận này:

db.collection.find({
    $expr: {
        $gt: [
            {
                $size: {
                    $filter: {
                        input: { $objectToArray: '$$ROOT' },
                        cond: { 
                            $ifNull: ['$$this.v.work', false]
                        }
                    }
                }
            },
            0
        ]
    }
})

Không phải là phương pháp hay để có các giá trị làm khóa và hiện tại (và có thể cả trong tương lai) không thể truy vấn bộ sưu tập MongoDB bằng các ký tự đại diện trong tên trường.

Để có một thiết kế giản đồ thay thế dễ truy vấn, tôi sẽ đề xuất một thiết kế lại giản đồ tuân theo mô hình này:

"_id" : ObjectId("55128d6315f3df650f2038cf"),
"customer_name" : "test user",
"createad" : "2011-04-14 16:44:09",
"data" : [ 
    {
        "key" : "123456",
        "home" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        },
        "work" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        }
    }, 
    {
        "key" : "321456",
        "home" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        },
        "work" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        }
    }, 
    {
        "key" : "789654",
        "home" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        },
        "work" : {
            "id" : "1536734296",
            "last" : "2011-04-14 16:44:09"
        }
    }
]

}

Bạn có thể truy vấn như sau

db.collection.find({ "data.work" : { $exists : true, $ne : null } })

để kiểm tra sự tồn tại của work trong data mảng.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ánh xạ tài liệu MongoDB sang lớp chữ hoa chữ thường với các loại nhưng không có tài liệu nhúng

  2. Phân tích hiệu suất của một truy vấn - mongoDB

  3. Cách sử dụng hàm tổng hợp mongo db-query

  4. Tôi có nên trả về từng mảng hoặc dữ liệu trong Mongoose không

  5. Xác thực chiến lược địa phương của hộ chiếu dường như chỉ hoạt động trên máy chủ cục bộ với phiên bản MongoDB được chia sẻ