Kết hợp $and (logic AND) và $or (logic OR) để xây dựng điều kiện truy vấn phức tạp, lồng nhiều cấp. MongoDB đánh giá các điều kiện theo logic boolean chuẩn.
Dữ liệu mẫu
> db.demo12.insertOne({"Name":"Chris","Age":23,"CountryName":"US","Message":"Hello"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0f70a2d7df943a7cec4fa2") }
> db.demo12.insertOne({"Name":"David","Age":21,"CountryName":"US","Message":"Hello"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0f70acd7df943a7cec4fa3") }
> db.demo12.insertOne({"Name":"Bob","Age":23,"CountryName":"AUS","Message":"Hi"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0f70bad7df943a7cec4fa4") }
> db.demo12.insertOne({"Name":"Carol","Age":24,"CountryName":"US","Message":"Hi"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0f70c7d7df943a7cec4fa5") }
Xem dữ liệu
> db.demo12.find();
{ "_id" : ObjectId("5e0f70a2d7df943a7cec4fa2"), "Name" : "Chris", "Age" : 23, "CountryName" : "US", "Message" : "Hello" }
{ "_id" : ObjectId("5e0f70acd7df943a7cec4fa3"), "Name" : "David", "Age" : 21, "CountryName" : "US", "Message" : "Hello" }
{ "_id" : ObjectId("5e0f70bad7df943a7cec4fa4"), "Name" : "Bob", "Age" : 23, "CountryName" : "AUS", "Message" : "Hi" }
{ "_id" : ObjectId("5e0f70c7d7df943a7cec4fa5"), "Name" : "Carol", "Age" : 24, "CountryName" : "US", "Message" : "Hi" }
Truy vấn lồng: Name="Bob" AND Age=23 AND (CountryName="UK" OR Message="Hi")
> db.demo12.find({ $and : [ { Name : 'Bob' }, { Age : 23 }, { $or : [ { CountryName : 'UK' }, { Message : 'Hi' } ] } ] } );
Kết quả
{ "_id" : ObjectId("5e0f70bad7df943a7cec4fa4"), "Name" : "Bob", "Age" : 23, "CountryName" : "AUS", "Message" : "Hi" }
Giải thích: Điều kiện $or bên trong $and yêu cầu tài liệu thoả mãn Name=Bob, Age=23, VÀ (CountryName=UK HOẶC Message=Hi). Bob thoả mãn vì Message="Hi". Carol không khớp vì Name khác. Lưu ý: $and tường minh chỉ cần khi cùng một trường xuất hiện nhiều lần trong query, thường MongoDB tự ngầm AND các key ở cấp độ trên.