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

Truy vấn phần tử đối tượng trong mảng MongoDB

Để truy vấn dựa trên một phần của đối tượng bên trong mảng, có thể sử dụng findOne() kết hợp với toán tử $all.

Tạo collection với mảng đối tượng lồng nhau:

> db.demo25.insertOne({
  "Details":[
    { "UserId":"Carol101", "UserName":"Carol" },
    { "UserId":"David102", "UserName":"David" }
  ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e14c86e22d07d3b95082e77") }
> db.demo25.insertOne({
  "Details":[
    { "UserId":"Chris101", "UserName":"Chris" },
    { "UserId":"Mike102", "UserName":"Mike" }
  ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e14c86f22d07d3b95082e78") }

Xem dữ liệu:

> db.demo25.find();
{
  "_id" : ObjectId("5e14c86e22d07d3b95082e77"),
  "Details" : [
    { "UserId" : "Carol101", "UserName" : "Carol" },
    { "UserId" : "David102", "UserName" : "David" }
  ]
}
{
  "_id" : ObjectId("5e14c86f22d07d3b95082e78"),
  "Details" : [
    { "UserId" : "Chris101", "UserName" : "Chris" },
    { "UserId" : "Mike102", "UserName" : "Mike" }
  ]
}

Truy vấn tìm tài liệu có mảng Details chứa cả hai UserId "Carol101" VÀ "David102":

> db.demo25.findOne({ "Details.UserId":{$all : ["Carol101","David102"]}});

Kết quả:

{
  "_id" : ObjectId("5e14c86e22d07d3b95082e77"),
  "Details" : [
    { "UserId" : "Carol101", "UserName" : "Carol" },
    { "UserId" : "David102", "UserName" : "David" }
  ]
}

Giải thích: Toán tử $all khớp với tài liệu mà trường mảng chứa tất cả các giá trị chỉ định (thứ tự không quan trọng). Khác với $in chỉ cần khớp một trong số các giá trị.