MongoDB หรือโอเปอเรเตอร์

Mongodb Hrux Xo Pexre Texr



เรามีตัวดำเนินการแบบสอบถามเชิงตรรกะที่แตกต่างกันซึ่งมีอยู่ใน MongoDB และหนึ่งในนั้นคือตัวดำเนินการ $หรือ ตัวดำเนินการ MongoDB $or ถูกใช้เพื่อนำการดำเนินการ OR แบบลอจิคัลบนอาร์เรย์ที่มีนิพจน์ตั้งแต่สองนิพจน์ขึ้นไป และดึงเฉพาะเอกสารที่ตรงกับหนึ่งในนิพจน์ที่ระบุในอาร์เรย์ ตัวดำเนินการ $หรือ ใช้เพื่อค้นหาหลายคำสั่งในแบบสอบถามเดียวโดยมีเพียงเกณฑ์เอกสารที่ตรงกันเพียงข้อเดียว ตัวดำเนินการ $or อำนวยความสะดวกในการรวมคีย์และค่าต่างๆ

วิธีใช้ตัวดำเนินการ OR ใน MongoDB

ตัวดำเนินการ OR ใน MongoDB แสดงในรูปแบบ “$or” “$or” ใช้เพื่อปิดหลายนิพจน์ในวงเล็บเหลี่ยมที่มีการดำเนินการตรรกะ OR เราใช้ตัวดำเนินการ $or ในคอลเลกชัน MongoDB เราสร้างคอลเลกชัน MongoDB ซึ่งมีชื่อว่า “ผู้ป่วย” คอลเลคชัน 'ผู้ป่วย' ถูกแทรกด้วยเอกสารหลายชุดที่เราดำเนินการ $ หรือตัวดำเนินการ เอกสารต่อไปนี้ถูกแทรกใน MongoDB โดยเรียกใช้เมธอด insertMany():

db.Patients.insertMany ( [
{
'ชื่อจริง' : 'เจนนิเฟอร์' ,
'นามสกุล' : 'โจชัว' ,
'อายุ' : 44 ,
'หมายเลขโทรศัพท์' : 43400517 ,
'การนัดหมาย' : 'ทันตแพทย์' ,
'ค่าธรรมเนียม' : 2543 ,
'ทดสอบ' : [ 'เอ็กซ์เรย์' , 'เลือด' , 'พัลลภ' ]
} ,
{
'ชื่อจริง' : 'โธมัส' ,
'นามสกุล' : 'สตีเว่น' ,
'อายุ' : 74 ,
'หมายเลขโทรศัพท์' : 39034694 ,
'วันนัดหมาย' : 'ศัลยแพทย์' ,
'ค่าธรรมเนียม' : 6000 ,
'ทดสอบ' : [ 'วิชาเลือก' , 'ป.ป.ท.' ]
} ,
{
'ชื่อจริง' : 'ชาร์ลส์' ,
'นามสกุล' : “แดเนียล” ,
'อายุ' : 35 ,
'หมายเลขโทรศัพท์' : 65712165 ,
'การนัดหมาย' : 'อายุรแพทย์โรคหัวใจ' ,
'ค่าธรรมเนียม' : 2543 ,
'ทดสอบ' : [ 'ซีที' , 'เอ็มอาร์ไอ' ]
} ,
{
'ชื่อจริง' : 'มิเชล' ,
'นามสกุล' : 'พอล' ,
'อายุ' : 51 ,
'หมายเลขโทรศัพท์' : 54399288 ,
'การนัดหมาย' : 'แพทย์ผิวหนัง' ,
'ค่าธรรมเนียม' : 8000 ,
'ทดสอบ' : [ 'การตรวจชิ้นเนื้อผิวหนัง' , 'แสงไม้' , “การขูดผิวหนัง” ]
} ,

{
'ชื่อจริง' : 'แอนดรูว์' ,
'นามสกุล' : 'เจอร์รี่' ,
'อายุ' : 69 ,
'หมายเลขโทรศัพท์' : 6108100 ,
'การนัดหมาย' : 'อายุรแพทย์โรคหัวใจ' ,
'ค่าธรรมเนียม' : 7000 ,
'ทดสอบ' : [ 'คลื่นไฟฟ้าหัวใจ' , 'กลูโคสในเลือด' , 'อัลตราซาวนด์' ]
}
] )

ผลลัพธ์ของเอกสารที่แทรกไว้ก่อนหน้านี้รับทราบว่า 'จริง' และระบุค่า 'insertedIds' สำหรับแต่ละเอกสาร









ตัวอย่างที่ 1: MongoDB $OR ตัวดำเนินการเพื่อให้ตรงกับเอกสาร

แบบสอบถามพื้นฐานของตัวดำเนินการ $or MongoDB ถูกนำมาใช้ที่นี่ ซึ่งแสดงให้เห็นถึงการทำงานของตัวดำเนินการนี้ใน MongoDB ที่นี่ เรากำหนดคิวรีด้วยเมธอด find() วิธีการ find() ถูกระบุเพิ่มเติมด้วยตัวดำเนินการ $หรือ ตัวดำเนินการ $or ใช้สองฟิลด์ 'การนัดหมาย' และ 'ค่าบริการ' ซึ่งถูกกำหนดด้วยค่าต่างๆ ตัวดำเนินการ $หรือ จับคู่ค่าฟิลด์และดึงเฉพาะเอกสารที่มีค่าตรงกับค่าฟิลด์ โครงสร้างแบบสอบถามของตัวดำเนินการ $หรือ มีดังต่อไปนี้:



db.Patients.find ( { $หรือ : [ { การนัดหมาย: 'แพทย์ผิวหนัง' } ,
{ ค่าใช้จ่าย: 7000 } ] } ) .สวย ( )

เราดึงเอกสารที่ 'นัดหมาย' กับ 'แพทย์ผิวหนัง' และ 'ค่าใช้จ่าย' คือ '7000' ตัวดำเนินการ $หรือ ค้นหาผลลัพธ์จริงจากค่าฟิลด์ทั้งสองและส่งกลับเอกสารที่ตรงกันในผลลัพธ์





ตัวอย่างที่ 2: ตัวดำเนินการ MongoDB $OR เพื่อจับคู่เอกสารที่ไม่มีอยู่จริง

ในการสืบค้นก่อนหน้าของตัวดำเนินการ $หรือ เราดึงเอกสารที่ตรงกัน ตอนนี้ เราดึงเอกสารที่ไม่มีอยู่จริงจากคอลเลกชัน 'ผู้ป่วย' ข้อความค้นหา $หรือโอเปอเรเตอร์ต่อไปนี้ใช้เอกสารที่มี 'ชื่อ' คือ 'ชาร์ลส์' และ 'การนัดหมาย' อยู่กับ 'แพทย์' ตัวดำเนินการ $ หรือจับคู่ค่าฟิลด์เหล่านี้ภายในคอลเลกชัน 'ผู้ป่วย' และสร้างผลลัพธ์หลังจากจับคู่



db.Patients.find ( { $หรือ : [ { 'ชื่อจริง' : 'ชาร์ลส์' } , { 'การนัดหมาย' : 'แพทย์' } ] } ) .สวย ( )

ตัวดำเนินการ $or มีผลลัพธ์จริงหนึ่งรายการ และอีกรายการหนึ่งมีผลลัพธ์เป็นเท็จ เนื่องจากเราระบุ 'นัดหมาย' ด้วยค่า 'แพทย์' ซึ่งไม่ตรงกับเอกสารใดในชุด 'ผู้ป่วย' นั่นเป็นเหตุผลที่ตัวดำเนินการ $หรือส่งคืนเฉพาะเอกสารของฟิลด์ที่ตรงกันซึ่งเป็น 'ผู้ป่วย' เป็นเอาต์พุต

ตัวอย่างที่ 3: MongoDB $OR ตัวดำเนินการที่มีหลายอาร์กิวเมนต์

เราระบุสองอาร์กิวเมนต์ในการสืบค้น $หรือโอเปอเรเตอร์ก่อนหน้า ที่นี่ เราส่งอาร์กิวเมนต์มากกว่าสองรายการเป็นนิพจน์ $หรือโอเปอเรเตอร์ เราดึงข้อมูลเอกสารที่ตรงกับค่าฟิลด์ 'อายุ' ใดๆ ที่กำหนดให้ ข้อกำหนด $หรือตัวดำเนินการจะเหมือนกันสำหรับอาร์กิวเมนต์หลายตัวที่หนึ่งในนิพจน์ควรเป็นจริง แบบสอบถามสำหรับหลายอาร์กิวเมนต์ในตัวดำเนินการ $หรือจะได้รับดังนี้:

db.Patients.find ( { 'การนัดหมาย' : 'อายุรแพทย์โรคหัวใจ' , $หรือ : [ { 'อายุ' : ยี่สิบ } , { 'อายุ' : 35 } , { 'อายุ' : 69 } ] } )

ที่นั่น เรามีผลลัพธ์ที่ตรงกันสองรายการซึ่งได้มาจากตัวดำเนินการ $หรือ ค่า 'อายุ' ซึ่งเป็น '35' และ '69' จะถูกเปรียบเทียบกับเอกสาร 'ผู้ป่วย' ซึ่งได้รับโดย $หรือตัวดำเนินการและแสดงบนเชลล์

ตัวอย่างที่ 4: MongoDB $OR ตัวดำเนินการที่มีการรวม

วิธีการรวมใน MongoDB จะรวมเร็กคอร์ดเป็นคอลเลกชัน ดังนั้นจึงสามารถใช้สำหรับการดำเนินการต่างๆ เราใช้ $หรือตัวดำเนินการในวิธีการรวมซึ่งประเมินหนึ่งนิพจน์หรือมากกว่าและส่งคืนค่าจริงหากค่าใดค่าหนึ่งมีค่าเป็นจริง มิฉะนั้นจะถือว่าข้อความนั้นเป็นเท็จ

มาลองค้นหา $หรือตัวดำเนินการการรวมที่เราเรียกใช้เมธอดการรวม () ก่อน ซึ่งจากนั้นปรับใช้ $match และ $project ซึ่งระบุด้วยค่า _id ที่จะจับคู่จากเอกสาร จากนั้น เราตั้งค่าฟิลด์ 'อายุ' ด้วยค่า '1' เนื่องจากเราต้องการให้สร้างฟิลด์นี้จากเอกสารทั้งหมดเท่านั้น หลังจากนั้น เรากำหนดแอตทริบิวต์ “ผลลัพธ์” ซึ่งมีการดำเนินการ $หรือ ตัวดำเนินการ $or รับคำสั่งเงื่อนไขของ $gt นิพจน์ “$gt:[“$Age”, 69]” จะแสดงอายุที่มีค่ามากกว่า “69” ผลลัพธ์สำหรับนิพจน์นี้จะถูกส่งผ่านไปยังตัวดำเนินการ $หรือ และตัวดำเนินการ $หรือจะส่งคืนเอกสารที่ตรงตามเงื่อนไขที่ระบุ

db.Patients.aggregate (
[
{ $ตรงกัน : { _id: รหัสวัตถุ ( '6391c61a4c91e007fb4f0228' ) } } ,
{ โครงการ $ : {
_id: รหัสวัตถุ ( '6391c61a4c91e007fb4f0227' ) ,
อายุ: หนึ่ง ,
ผลลัพธ์: { $หรือ : [
{ $gt : [ ' $อายุ ' , 69 ] }
] }
}
}
]
)

“อายุ” ที่มากกว่า “69” คือ “74” ซึ่งจะแสดงในเอาต์พุตเชลล์พร้อมกับ “ผลลัพธ์” ซึ่งมีค่า “จริง”

ตัวอย่างที่ 5: MongoDB $OR ตัวดำเนินการเรียกใช้เงื่อนไข

ตัวดำเนินการ $or ของ MongoDB เป็นตัวดำเนินการเชิงตรรกะ เราสามารถใช้ตัวดำเนินการเชิงตรรกะนี้กับตัวดำเนินการตามเงื่อนไข ตัวดำเนินการ $or ส่งคืนผลลัพธ์เมื่อตรงตามเงื่อนไข นอกจากนี้ เราสามารถเรียกใช้เงื่อนไขมากกว่าหนึ่งเงื่อนไขใน $หรือตัวดำเนินการ ซึ่งเงื่อนไขหนึ่งต้องเป็นจริง ที่นี่ เรามีคำถามของ $หรือตัวดำเนินการซึ่งระบุด้วยสองเงื่อนไขที่แตกต่างกัน เงื่อนไขแรกคือ “{ค่าธรรมเนียม:{$lt: 6000}}” ซึ่งจะส่งคืนเอกสารที่น้อยกว่าค่า “ค่าธรรมเนียม” ที่ “6000” เงื่อนไข {ค่าธรรมเนียม:“$gt: 7000”} รับเอกสารที่มากกว่าค่า “ค่าธรรมเนียม” ที่ “7000”

ตัวดำเนินการ $หรือ ให้เอกสารที่ตรงกันเมื่อตรงตามเงื่อนไขเหล่านี้ จากนั้น เราระบุชื่อฟิลด์ซึ่งจะแสดงเฉพาะเมื่อตัวดำเนินการ $หรือ ให้เอกสารที่ตรงกัน

db.Patients.find ( {
$หรือ : [
{ ค่าใช้จ่าย: { $lt : 6000 } } ,
{ ค่าใช้จ่าย: { $gt : 7000 } }
]
} , {
ชื่อจริง: หนึ่ง ,
ค่าใช้จ่าย: หนึ่ง
} )

ผลลัพธ์จะแสดงเฉพาะฟิลด์ 'FirstName' และ 'Charges' สำหรับเอกสารที่ตรงกัน

ตัวอย่างที่ 6: MongoDB $OR ตัวดำเนินการที่ไม่มีอาร์กิวเมนต์

แบบสอบถามที่นำมาใช้ทั้งหมดที่มีตัวดำเนินการ $หรือจะถูกส่งผ่านด้วยค่าอาร์กิวเมนต์ ตอนนี้ เรากำหนดแบบสอบถาม $หรือตัวดำเนินการซึ่งไม่ป้อนอาร์กิวเมนต์ เมื่อดำเนินการคิวรีอาร์กิวเมนต์ $หรือโอเปอเรเตอร์ที่ว่างเปล่า ระบบจะประเมินผลลัพธ์ที่เป็นเท็จ เราให้แบบสอบถามที่มีการส่งผ่านการดำเนินการ $หรือด้วยนิพจน์ว่าง

db.Patients.aggregate (
[
{ $ตรงกัน : { _id: { $ ใน : [ รหัสวัตถุ ( '6391c61a4c91e007fb4f0228' ) ] } } } ,
{ โครงการ $ : {
_id: รหัสวัตถุ ( '6391c61a4c91e007fb4f0227' ) ,
ผลลัพธ์: { $หรือ : [ ] } }
}
]
)

เนื่องจากตัวดำเนินการ $หรือถูกระบุด้วยอาร์กิวเมนต์ว่าง ผลลัพธ์จึงระบุค่าเท็จ

ตัวอย่างที่ 7: ตัวดำเนินการ MongoDB $OR จับคู่ค่าอาร์เรย์

เราแทรกอาร์เรย์ 'ทดสอบ' ในเอกสารที่มีค่าต่างกัน เราใช้อาร์เรย์นั้นสำหรับตัวดำเนินการ $หรือเพื่อตรวจสอบผลลัพธ์ ตัวดำเนินการ $หรือ ในแบบสอบถามต่อไปนี้ถูกเรียกใช้ภายในเมธอด find() ตัวดำเนินการ $or ใช้อาร์เรย์ 'ทดสอบ' เป็นนิพจน์ อาร์เรย์ 'ทดสอบ' ใช้ตัวดำเนินการ $in เพื่อระบุเอกสารที่มีค่าฟิลด์ตรงกับค่า 'MRI' และ 'CT' ในอาร์เรย์

db.Patients.find ( { $หรือ : [ { ทดสอบ: { $ ใน : [ 'เอ็มอาร์ไอ' , 'ซีที' ] } } ] } ) .สวย ( )

เอกสารหนึ่งรายการจะแสดงบนเชลล์เมื่อดำเนินการ $หรือตัวดำเนินการแบบสอบถาม ซึ่งแสดงว่าเอกสารที่ดึงมามีค่าอาร์เรย์ที่ระบุ

บทสรุป

บทความ MongoDB นี้แสดงตัวอย่างการใช้ MongoDB $หรือตัวดำเนินการค้นหาเพื่อดำเนินการทางตรรกะ OR บนอาร์เรย์ที่มีนิพจน์ตั้งแต่สองนิพจน์ขึ้นไป ตลอดจนดึงเอกสารที่ตรงกับนิพจน์อย่างน้อยหนึ่งรายการ ตัวดำเนินการ $or ถูกสอบถามในเชลล์ MongoDB เพื่อดำเนินการต่างๆ ตัวดำเนินการ $or ถูกใช้ในตัวดำเนินการแบบมีเงื่อนไขเป็นนิพจน์และส่งคืนเอกสารตามคำสั่งแบบมีเงื่อนไข