Bạn có thể sử dụng toán tử $ pull cho việc này. Đầu tiên chúng ta hãy tạo một bộ sưu tập với các tài liệu. Ở đây, chúng tôi cũng đã thêm một đối tượng trống -
> db.removeEmptyObjectsDemo.insertOne( { "_id" :101, "LoginDate" :new ISODate(), "UserDetails" : [ { "UserName" : "John" }, { }, { "UserName" : "Sam" } ] } ); { "acknowledged" : true, "insertedId" : 101 }
Sau đây là truy vấn để 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.removeEmptyObjectsDemo.find().pretty();
Điều này sẽ tạo ra kết quả sau -
{ "_id" : 101, "LoginDate" : ISODate("2019-05-25T04:46:29.505Z"), "UserDetails" : [ { "UserName" : "John" }, { }, { "UserName" : "Sam" } ] }
Sau đây là truy vấn để loại bỏ các đối tượng trống trong một mảng đối tượng -
> db.removeEmptyObjectsDemo.update( {}, { "$pull": { "UserDetails": { "UserName": { "$exists": false } } } }, { "multi": true } ); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Hãy để chúng tôi kiểm tra các tài liệu từ bộ sưu tập trên -
> db.removeEmptyObjectsDemo.find().pretty();
Điều này sẽ tạo ra kết quả sau. Đối tượng trống đã được xóa thành công -
{ "_id" : 101, "LoginDate" : ISODate("2019-05-25T04:46:29.505Z"), "UserDetails" : [ { "UserName" : "John" }, { "UserName" : "Sam" } ] }