ค้นหา Mongo โดยเติมข้อมูลในไปป์ไลน์การรวมพร้อมดัชนีข้อความ

ฉันมีคำถามหนึ่งข้อเกี่ยวกับการดำเนินการค้นหา การใช้การค้นหาหรือการค้นหา Atlas ที่นี่เหมาะที่สุดสำหรับการค้นหาในคอลเล็กชันเดียว ฉันคิดว่าปกติแล้วเราต้องเผชิญกับสถานการณ์ที่เราจำเป็นต้องค้นหาด้วยการเติมข้อมูลหรือการรวบรวมการอ้างอิงด้วย ฉันจะทำอย่างไรให้มีการใช้งานที่ดีขึ้น

พิจารณาสถานการณ์ง่ายๆ ที่ฉันมี คอลเลกชัน 2 รายการ

1 ผลิตภัณฑ์ (ดัชนีข้อความในช่องชื่อผลิตภัณฑ์)

2 ผู้ใช้ (ดัชนีข้อความในช่องชื่อผู้ใช้อาจเป็นชื่อ นามสกุล ฯลฯ)

ผู้ใช้สร้างผลิตภัณฑ์ ดังนั้นในการรวบรวมผลิตภัณฑ์จึงมีการอ้างอิง createdBy ด้วย MongoID ของผู้ใช้ ในส่วนหน้ามีรายการผลิตภัณฑ์ดังนั้นฉันจึงต้องระบุเกณฑ์การค้นหาด้านล่างในการค้นหาข้อความเดียว

  1. ฉันสามารถค้นหาด้วยชื่อผลิตภัณฑ์
  2. สามารถค้นหาด้วยชื่อเจ้าของสินค้าได้

วิธีที่ดีที่สุดในการจัดการกับสถานการณ์ดังกล่าวด้วย MongoAtlas คืออะไร อดีต. ฉันต้องการผลิตภัณฑ์ทั้งหมดที่สร้างโดย Donni Bachhan ไปป์ไลน์การรวมตัวของคุณคืออะไรหรือแนวปฏิบัติที่ดีที่สุดสำหรับมัน

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

https://developer.mongodb.com/community/forums/t/mongo-search-with-populate-in-aggregation-pipeline-with-text-index/6953


person Jaydipsinh Vaghela    schedule 22.07.2020    source แหล่งที่มา


คำตอบ (1)


ผมจะอธิบายเป็นขั้นตอนเลยดีกว่า

ขั้นตอนที่ 1: จับคู่กับคอลเลกชันผู้ใช้: คุณจะได้รับรายละเอียดผู้ใช้ที่นั่น

ขั้นตอนที่ 2: ค้นหาด้วยคอลเลกชันผลิตภัณฑ์: ด้วยเหตุนี้ คุณจะได้รับผลิตภัณฑ์ทั้งหมดที่ผู้ใช้สร้างขึ้น

ขั้นตอนที่ 3: จับคู่การค้นหา หากมีการค้นหาหรือตัวกรองที่จำเป็นในการจับคู่สิ่งนี้กับชื่อผลิตภัณฑ์

ตัวอย่าง: (หวังว่านี่อาจช่วยคุณได้)

    async function search(userid, query = null)
    {
      return await userModel
        .aggregate()
        .match({
          _id: userid
        })
        .lookup({
          from: "products",
          localField: "_id",
          foreignField: "userid",
          as: "products"
        })
        .match({ $text: { $search: "cake" }  })
        .exec();
    }
person BINFAS K    schedule 22.07.2020
comment
ใช่ มันเป็นวิธีแก้ปัญหาชั่วคราว และฉันได้นำแนวทางนี้ไปใช้แล้ว แต่มันไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์แบบสำหรับการสืบค้นสิ่งต่าง ๆ เมื่อพิจารณาว่าฉันมีข้อมูลหลายพันรายการและฉันเกี่ยวข้องกับการสืบค้นนี้ มันก็เกินความจำเป็นไปนิดหน่อย - person Jaydipsinh Vaghela; 22.07.2020
comment
และอย่างที่สอง ฉันไม่สามารถสืบค้นโดยตรงเพื่อทำ User Model ได้ เนื่องจากมีตัวกรองอื่นๆ มากมายที่ฉันต้องทำกับ Product Model มีวิธีอื่นในการทำเช่นนั้น - person Jaydipsinh Vaghela; 22.07.2020
comment
ฉันคิดว่าวิธีที่ดีกว่าคือคุณต้องทำการกรองทั้งหมดในการรวบรวมผลิตภัณฑ์ด้วยรหัสผู้ใช้ จากนั้นจึงระบุรายละเอียดผู้ใช้เพียง lookup หรือ populate - person BINFAS K; 22.07.2020
comment
สำหรับการค้นหาข้อความ ไม่มีกลไกในการระบุว่าผู้ใช้ค้นหาชื่อผลิตภัณฑ์หรือชื่อหรือนามสกุลของผู้ใช้ เราไม่สามารถทำเช่นนั้นได้ โปรดตรวจสอบรายละเอียดอย่างละเอียดเพื่อให้มีแนวคิดที่เหมาะสม เป็นกรณีที่แน่นอน - person Jaydipsinh Vaghela; 22.07.2020