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

Làm cách nào để lọc mảng trong subocument với MongoDB?

Bạn có thể sử dụng tổng hợp và giải phóng danh sách mảng trước khi áp dụng đối sánh. Để hiểu khái niệm trên, chúng ta hãy tạo một bộ sưu tập với các tài liệu. Truy vấn để tạo một bộ sưu tập với tài liệu như sau:

> db.filterArray.insertOne( { "L": [{ "N":1 }, { "N":2 } , { "N":3 }, { "N":4 }, { "N":5 } ]});

Thông tin sau sẽ hiển thị sau khi chạy truy vấn trên:

{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c6d63f2734e98fc0a434aeb")
}

Hiển thị 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 (). Truy vấn như sau:

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

Sau đây là kết quả:

{
   "_id" : ObjectId("5c6d63f2734e98fc0a434aeb"),
   "L" : [
      {
         "N" : 1
      },
      {
         "N" : 2
      },
      {
         "N" : 3
      },
      {
         "N" : 4
      },
      {
         "N" : 5
      }
   ]
}

Đây là truy vấn để lọc mảng trong tài liệu con với MongoDB. Chúng tôi đã sử dụng $ gt để lấy các trường lớn hơn 3:

> db.filterArray.aggregate({ $match:{_id:ObjectId("5c6d63f2734e98fc0a434aeb")}}, {
$unwind:'$L'}, {$match:{'L.N':{$gt:3}}},
{$group:{_id:'$_id',subDocument:{$push:'$L.N'}}}).pretty();

Sau đây là kết quả:

{
   "_id" : ObjectId("5c6d63f2734e98fc0a434aeb"),
   "subDocument" : [
      4,
      5
   ]
}