การใช้ $and เพื่อรวมเงื่อนไขหลายอย่าง (Logical AND) พร้อมกับ $gt (Greater Than)
> db.demo680.insertOne({Values: 40});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea4461b04263e90dac943fe") }
> db.demo680.insertOne({Values: 70});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea4461e04263e90dac943ff") }
> db.demo680.insertOne({Values: [80, 30]});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea4462a04263e90dac94400") }
> db.demo680.insertOne({Values: 20});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea4463304263e90dac94401") }
แสดงข้อมูล (สังเกตเอกสารที่ 3 Values เป็นอาร์เรย์ [80, 30]):
> db.demo680.find();
คิวรี $and: Values > 60 และมีค่า 30 อยู่ในอาร์เรย์
> db.demo680.find({$and: [{Values: {$gt: 60}}, {Values: 30}]})ผลลัพธ์ - ได้เฉพาะเอกสารที่ Values = [80, 30]:
คำอธิบาย
- {Values: {$gt: 60}}: Values ต้องมากกว่า 60 (match ได้ทั้ง 70 และ [80,30] เพราะ 80 > 60)
- {Values: 30}: Values ต้องมีค่า 30 (match ได้เฉพาะ [80,30] เพราะอาร์เรย์มี 30)
- $and: ต้องตรงทั้งสองเงื่อนไขพร้อมกัน
การทำงานกับ Array Field
MongoDB match array field โดยอัตโนมัติ: {field: value} จะ match ถ้าอาร์เรย์มีค่านั้นอยู่ (ไม่ต้อง $elemMatch)
$and แบบ Implicit (เข้าใจง่ายกว่า)
MongoDB รวมเงื่อนไขใน object เดียวกันเป็น AND อัตโนมัติ:
// ทั้งสองเทียบเท่า
db.find({$and: [{a: 1}, {b: 2}]});
db.find({a: 1, b: 2});
ใช้ $and จริงเมื่อ: เงื่อนไขซ้ำฟิลด์ (เช่น {$and: [{x: {$gt: 5}}, {x: {$lt: 10}}]}) หรือสร้าง query แบบ dynamic