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

กำลังสอบถามอาร์เรย์ของเอกสารที่ฝังใน MongoDB ตามช่วงหรือไม่


หากต้องการสอบถามอาร์เรย์ของเอกสารที่ฝังตามช่วง ให้ใช้ aggregate() ให้เราสร้างคอลเลกชันที่มีเอกสาร -

> db.demo346.insertOne(
...    {
...       _id: 101,
...       userDetails: [
...          { UserName: "Chris", Score:78},
...          { UserName: "David", Score:68},
...          { UserName: "Bob", Score:88}
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo346.insertOne(
...    {
...       _id: 102,
...       userDetails: [
...          { UserName: "Mike", Score:92},
...          { UserName: "Sam", Score:62},
...          { UserName: "Carol", Score:97}
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 102 }

แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -

> db.demo346.find();

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{
   "_id" : 101, "userDetails" : [
      { "UserName" : "Chris", "Score" : 78 },
      { "UserName" : "David", "Score" : 68 },
      { "UserName" : "Bob", "Score" : 88 }
   ]
}
{
   "_id" : 102, "userDetails" : [
      { "UserName" : "Mike", "Score" : 92 },
      { "UserName" : "Sam", "Score" : 62 },
      { "UserName" : "Carol", "Score" : 97 }
   ] 
}

ต่อไปนี้เป็นวิธีการสืบค้นอาร์เรย์ของเอกสารที่ฝังใน MongoDB ตามช่วง -

> db.demo346.aggregate([
...    { "$match": { "$expr": { "$gte": [{ "$size": { "$ifNull": ["$userDetails", []] } }, 1] }}},
...    { "$addFields": {
...          "userDetails": {
...          "$filter": {
...             "input": { "$ifNull": ["$userDetails", []] },
...             "cond": {
...                "$and": [
...                   { "$gte": ["$$this.Score", 80] },
...                   { "$lte": ["$$this.Score", 99] }
...                ]
...             }
...          }
...       }
...    }}
... ])

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "_id" : 101, "userDetails" : [ { "UserName" : "Bob", "Score" : 88 } ] }
{ "_id" : 102, "userDetails" : [ { "UserName" : "Mike", "Score" : 92 }, { "UserName" : "Carol", "Score" : 97 } ] }