Để lọc các nhật ký có chứa từ “công việc”, hãy sử dụng tổng hợp () cùng với bộ lọc $. Trước tiên, hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -
> db.demo383.insertOne( ... { ... "ServerName":"Jboss", ... "ServerLogs": [ ... { ... "status":"Working" ... }, ... { ... "status":"Stop" ... }, ... { ... "status":"Worked" ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e5b635422064be7ab44e7f1") }
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.demo383.find().pretty();
Điều này sẽ tạo ra kết quả sau -
{ "_id" : ObjectId("5e5b635422064be7ab44e7f1"), "ServerName" : "Jboss", "ServerLogs" : [ { "status" : "Working" }, { "status" : "Stop" }, { "status" : "Worked" } ] }
Sau đây là truy vấn để lọc -
> db.demo383.aggregate([ ... { "$addFields": { ... "ServerLogs": { ... "$filter": { ... "input": "$ServerLogs", ... "cond": { ... "$ne": [ ... { "$indexOfBytes": [ ... { "$toUpper": "$$this.status" }, ... { "$toUpper": "work" } ... ]}, ... -1 ... ] ... } ... } ... } ... }} ... ])
Điều này sẽ tạo ra kết quả sau -
{ "_id" : ObjectId("5e5b635422064be7ab44e7f1"), "ServerName" : "Jboss", "ServerLogs" : [ { "status" : "Working" }, { "status" : "Worked" } ] }