MongoDB aggregation framework ตรงกับ OR


104

เป็นไปได้ไหมที่จะทำ OR ในการจับคู่ $?

ฉันหมายถึงสิ่งนี้:

db.articles.aggregate(
    { $or: [ $match : { author : "dave" }, $match : { author : "john" }] }
);

คำตอบ:


176
$match: { $or: [{ author: 'dave' }, { author: 'john' }] }

เช่นนั้นเนื่องจากตัว$matchดำเนินการเพียงแค่นำสิ่งที่คุณใส่ลงไปในfind()ฟังก์ชันตามปกติ


91

ในกรณีนี้โดยเฉพาะอย่างยิ่งที่คุณจะ$orไอเอ็นจีสาขาเดียวกันที่$inผู้ประกอบการจะเป็นทางเลือกที่ดีกว่าก็เพราะมันจะเพิ่มความสามารถในการอ่าน:

$match: { 
  'author': { 
    $in: ['dave','john'] 
  } 
}

ตามเอกสาร MongoDB $inแนะนำให้ใช้ในกรณีนี้:

$ หรือเทียบกับ $ in

เมื่อใช้ $ หรือด้วย <expressions> ที่ตรวจสอบความเท่าเทียมกันสำหรับค่าของฟิลด์เดียวกันให้ใช้ตัวดำเนินการ $ in แทน $ หรือตัวดำเนินการ

https://docs.mongodb.com/manual/reference/operator/query/or/#or-versus-in


1
ตามเอกสารของ Mongo วิธีที่ "มีประสิทธิภาพที่สุด" ในการเปรียบเทียบความเท่าเทียมกันเช่นตัวอย่างของคุณ ดูdocs.mongodb.org/manual/reference/operator/query/or/#_S_or%22
Mark Gibaud

3
$ in คือหนทางที่จะไป
blueskin

1
ฉันเชื่อว่า $ หรือไม่ใช่ตัวดำเนินการรวม
Paul Shapiro

@PaulShapiro: ฉันหวังว่าคุณจะไม่โหวตเพราะเรื่องนี้ สำหรับทุกคนโปรดพิจารณาแสดงความคิดเห็นเหตุผลก่อนลงคะแนนจะช่วยให้ทุกคน นี่คือข้อมูลอ้างอิงBoolean Aggregation Operators -> $ หรือ
Amol M Kulkarni

คำตอบของคุณไม่ถูกต้องและอย่างที่คุณเห็นฉันได้แสดงความคิดเห็นแล้วว่าคำตอบนั้นไม่ถูกต้องตรงไหนและอย่างไร
Paul Shapiro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.