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

Lấy bản ghi từ mảng sub-document có id bắt đầu bằng 234 trong MongoDB

Để lọc bản ghi từ mảng sub-document, hãy sử dụng $unwind kết hợp $match với regex. Để lọc id bắt đầu bằng "234", dùng regex /^234/.

Tạo collection với mảng details chứa các object có id dạng chuỗi:

> db.demo556.insertOne(
... {
...     _id:101,
...     details:[
...         { id:"234336", Name:"Chris" },
...         { id:"123456", Name:"Bob" },
...         { id:"234987", Name:"Carol" },
...         { id:"989768", Name:"David" },
...         { id:"234888", Name:"Sam" },
...         { id:"847656", Name:"John" }
...     ]
... }
... );
{ "acknowledged" : true, "insertedId" : 101 }

Hiển thị tài liệu gốc:

> db.demo556.find();

Kết quả:

{ "_id" : 101, "details" : [ { "id" : "234336", "Name" : "Chris" }, { "id" : "123456", "Name" : "Bob" }, { "id" : "234987", "Name" : "Carol" }, { "id" : "989768", "Name" : "David" }, { "id" : "234888", "Name" : "Sam" }, { "id" : "847656", "Name" : "John" } ] }

Pipeline aggregate: match _id=101, unwind mảng details, match regex id bắt đầu 234, group lại đẩy vào mảng Detail:

> db.demo556.aggregate({
...     $match: { "_id": 101 }
... }, {
...     $unwind: "$details"
... }, {
...     $match: {
...         "details.id": { $regex: /^234/ }
...     }
... }, {
...     $group: {
...         _id: "$_id",
...         "Detail": { $push: "$details" }
...     }
... }).pretty();

Kết quả (3 bản ghi id bắt đầu 234):

{
    "_id" : 101,
    "Detail" : [
        { "id" : "234336", "Name" : "Chris" },
        { "id" : "234987", "Name" : "Carol" },
        { "id" : "234888", "Name" : "Sam" }
    ]
}