Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Lấy giá trị từ mảng JSON lồng nhau trong MongoDB

Sử dụng dấu chấm (dot notation) để truy cập sâu vào mảng lồng nhau. Cú pháp:

db.yourCollectionName.find({"yourOuterField.yourInnerField.yourNextInnerField...": "yourValue"}).pretty();

Tạo collection với mảng lồng nhau

> db.nestedJSONArrayDemo.insertOne({
    "ClientDetails": {
        "ClientPersonalDetails": [
            { "CountryName": "US" },
            { "CountryName": "AUS" },
            { "ClientName": "Chris" },
            { "ClientName": "David" }
        ]
    }
});
{ "acknowledged": true, "insertedId": ObjectId("5cd2cbb2b64f4b851c3a13bc") }
> db.nestedJSONArrayDemo.insertOne({
    "ClientDetails": {
        "ClientPersonalDetails": [
            { "CountryName": "Belgium" },
            { "CountryName": "Canada" },
            { "CountryName": "Egypt" }
        ]
    }
});
{ "acknowledged": true, "insertedId": ObjectId("5cd2cc14b64f4b851c3a13bd") }

Hiển thị tất cả

> db.nestedJSONArrayDemo.find().pretty();

Truy vấn tìm tài liệu có CountryName = "Canada" trong mảng lồng nhau

> db.nestedJSONArrayDemo.find({"ClientDetails.ClientPersonalDetails.CountryName": "Canada"}).pretty();

Kết quả:

{
    "_id": ObjectId("5cd2cc14b64f4b851c3a13bd"),
    "ClientDetails": {
        "ClientPersonalDetails": [
            { "CountryName": "Belgium" },
            { "CountryName": "Canada" },
            { "CountryName": "Egypt" }
        ]
    }
}

Giải thích: MongoDB tự động "unwind" mảng khi truy vấn bằng dot notation — nó kiểm tra từng phần tử trong mảng ClientPersonalDetails xem có trường CountryName = "Canada" không.