Computer >> Máy Tính >  >> Lập trình >> MongoDB

Truy vấn MongoDB cho các tài liệu có phần tử mảng không có giá trị cụ thể

Đối với những trường hợp như vậy, hãy sử dụng $ elemMatch. Toán tử này so khớp các tài liệu chứa trường mảng có ít nhất một phần tử khớp với tất cả các tiêu chí truy vấn đã chỉ định.

Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -

> db.demo239.insertOne(
...   {
...      "Name" : "Chris",
...      "details" : [
...         { "DueDate" : new ISODate("2019-01-21"), "ProductPrice" : 1270 },
...         { "DueDate" : new ISODate("2020-02-12"), "ProductPrice" : 2000 }
...      ]
...   }
...);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e441c6bf4cebbeaebec5157")
}
> db.demo239.insertOne(
...   {
...      "Name" : "David",
...      "details" : [
...         { "DueDate" : new ISODate("2018-11-11"), "ProductPrice" : 1450},
...         { "DueDate" : new ISODate("2020-02-12") }
...      ]
...   }
...);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e441c6cf4cebbeaebec5158")
}

Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -

> db.demo239.find();

Điều này sẽ tạo ra kết quả sau -

{
   "_id" : ObjectId("5e441c6bf4cebbeaebec5157"), "Name" : "Chris", "details" : [
      { "DueDate" : ISODate("2019-01-21T00:00:00Z"), "ProductPrice" : 1270 },
      { "DueDate" : ISODate("2020-02-12T00:00:00Z"), "ProductPrice" : 2000 }
   ]
}
{
   "_id" : ObjectId("5e441c6cf4cebbeaebec5158"), "Name" : "David", "details" : [
      { "DueDate" : ISODate("2018-11-11T00:00:00Z"), "ProductPrice" : 1450 },
      { "DueDate" : ISODate("2020-02-12T00:00:00Z") }
   ]
}

Sau đây là truy vấn để tìm nạp tài liệu có các phần tử mảng không có giá trị cụ thể -

> db.demo239.find({ "details": { "$elemMatch": { "DueDate": { "$exists": true }, "ProductPrice": { "$exists": false } } } })

Điều này sẽ tạo ra kết quả sau -

{ "_id" : ObjectId("5e441c6cf4cebbeaebec5158"), "Name" : "David", "details" : [ { "DueDate" : ISODate("2018-11-11T00:00:00Z"), "ProductPrice" : 1450 }, { "DueDate" : ISODate("2020-02-12T00:00:00Z") } ] }