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

Truy vấn lấy nhiều mục trong mảng MongoDB

Sử dụng aggregation: $unwind mảng, $match lọc, $group gom lại.

Tạo collection

> db.retrieveMultipleDemo.insertOne({
    "UserDetails": [
        { "_id": "101", "UserName": "John", "UserAge": 23 },
        { "_id": "102", "UserName": "Carol", "UserAge": 21 },
        { "_id": "103", "UserName": "David", "UserAge": 23 },
        { "_id": "104", "UserName": "Sam", "UserAge": 25 }
    ]
});
{ "acknowledged": true, "insertedId": ObjectId("5cd40c85edc6604c74817cf0") }

Hiển thị tài liệu

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

Aggregation lấy các user có _id trong myIds VÀ UserAge = 23

> db.retrieveMultipleDemo.aggregate([
    { $unwind: "$UserDetails" },
    { $match: { "UserDetails._id": { $in: myIds }, "UserDetails.UserAge": 23 } },
    { $group: { "_id": "$_id", "UserDetails": { $push: "$UserDetails" } } },
    { $project: { "_id": 0, "UserDetails": 1 } }
]);

Kết quả (giả sử myIds chứa 101, 103):

{
    "UserDetails": [
        { "_id": "101", "UserName": "John", "UserAge": 23 },
        { "_id": "103", "UserName": "David", "UserAge": 23 }
    ]
}

Lưu ý: Biến myIds cần được định nghĩa trước trong shell (ví dụ: var myIds = ["101", "103"]). Pipeline: unwind → match → group → project.