Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

Query หลายพารามิเตอร์ใน MongoDB (Dot Notation)

ใช้ Dot Notation Query ฟิลด์ซ้อนใน Object และ Array

MongoDB รองรับการ Query เข้าถึงฟิลด์ลึก (Nested Field) โดยใช้ Dot Notation (จุด) คั่นระหว่างระดับ

ตัวอย่างข้อมูล: Customer มี Details เป็น Array of Objects

> db.multipleParametersDemo.insertOne({
    "CustomerName": "Larry",
    "CustomerDetails": [
        {
            "CustomerCountryName": "US",
            "CustomerBankName": "HDFC",
            "CustomerBalance": 17363
        }
    ],
    "Purchase": 1456
});

คิวรี: หา CustomerName = "Larry" AND CustomerDetails.CustomerCountryName = "US"

> db.multipleParametersDemo.find({
    CustomerName: 'Larry',
    'CustomerDetails.CustomerCountryName': 'US'
}).count();

ผลลัพธ์

1

Dot Notation Patterns

Array Query Behavior

  • { "arr.field": value } Match ถ้า Element ใด Element หนึ่ง ใน Array มี field = value
  • ใช้ $elemMatch เมื่อต้อง Match หลายเงื่อนไขใน Element เดียวกัน

ตัวอย่าง $elemMatch

// หา Order ที่มี Item ราคา > 100 AND ในสต็อก (ใน Element เดียวกัน)
db.orders.find({
    items: { $elemMatch: { price: { $gt: 100 }, inStock: true } }
});

// ต่างจาก
db.orders.find({
    "items.price": { $gt: 100 },
    "items.inStock": true
}); // Match ถ้า Item A ราคา > 100 และ Item B ในสต็อก (คนละ Element ได้)

Index สำหรับ Dot Notation

// Single Field Index บน Nested Field
db.multipleParametersDemo.createIndex({ "CustomerDetails.CustomerCountryName": 1 });

// Compound Index
db.multipleParametersDemo.createIndex({
    "CustomerName": 1,
    "CustomerDetails.CustomerCountryName": 1
});
Patternตัวอย่างMatch กรณีไหน
Object.Field{ "address.city": "Bangkok" }Object ตรงๆ
Array.Object.Field{ "orders.items.name": "iPhone" }Element ใด Element หนึ่งใน Array Match
Array.Index.Field{ "tags.0": "important" }Element ที่ Index 0
Deep Nesting{ "a.b.c.d": 123 }หลายชั้น