Pencarian Mongo dengan populasi di pipa agregasi dengan indeks teks

Saya punya satu pertanyaan tentang implementasi pencarian. Di sini implementasi pencarian atau pencarian atlas paling cocok untuk pencarian dalam satu koleksi. Saya pikir biasanya kita menghadapi skenario di mana kita perlu mencari dengan populate atau ref collection juga. Bagaimana saya dapat melakukannya dengan penerapan yang lebih baik?

Pertimbangkan skenario yang sangat sederhana di mana saya memiliki 2 koleksi.

1 Produk (indeks teks bidang nama produk)

2 Pengguna (indeks teks pada kolom nama pengguna dapat berupa Nama Depan, Nama Belakang, dll)

Pengguna membuat produk sehingga dalam koleksi produk ada referensi di createdBy dengan MongoID pengguna. Di Frontend, ada daftar produk jadi saya perlu memberikan kriteria pencarian seperti di bawah ini dalam pencarian teks tunggal

  1. Saya dapat mencari dengan nama produk
  2. Saya dapat mencari dengan nama pemilik produk

Apa cara terbaik untuk menangani skenario seperti itu dengan MongoAtlas? mantan. Saya ingin semua produk dibuat oleh Donni Bachhan. saluran agregasi apa yang baru saja Anda gunakan atau praktik terbaiknya

Saya sudah mengajukan pertanyaan ke komunitas MongoDB tetapi tidak mendapatkan bantuan yang tepat, silakan tinjau tautan di bawah untuk referensi komunitas

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 sumber


Jawaban (1)


Lebih baik saya akan menjelaskannya sebagai langkah-langkah

Langkah 1: cocokkan dengan koleksi pengguna: Di sana Anda akan mendapatkan detail pengguna

Langkah 2: cari dengan koleksi produk: dengan itu, Anda akan mendapatkan semua produk yang dibuat pengguna.

Langkah 3: cocokkan dengan pencarian, jika diperlukan pencarian atau filter untuk mencocokkannya dengan nama produk

contoh : (Semoga dapat membantu anda)

    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
Ya, ini solusinya, dan saya sudah menerapkan pendekatan ini. Tapi itu bukan solusi sempurna untuk menanyakan hal-hal seperti itu, mengingat saya memiliki ribuan data dan saya melibatkan kueri ini maka itu sedikit berlebihan - person Jaydipsinh Vaghela; 22.07.2020
comment
Dan yang kedua, saya tidak bisa langsung melakukan query untuk melakukan Model Pengguna karena ada banyak filter lain yang perlu saya lakukan pada Model Produk. ada cara lain untuk itu. - person Jaydipsinh Vaghela; 22.07.2020
comment
Saya pikir metode yang lebih baik adalah Anda perlu melakukan semua penyaringan dalam koleksi produk dengan userid dan kemudian hanya lookup atau populate detail pengguna - person BINFAS K; 22.07.2020
comment
Untuk penelusuran teks, tidak ada mekanisme untuk mengidentifikasi penelusuran pengguna tersebut berdasarkan nama produk atau nama depan atau belakang pengguna. Kita tidak bisa melakukan itu. harap tinjau detailnya dengan cermat agar mendapatkan ide yang tepat. apa sebenarnya kasusnya - person Jaydipsinh Vaghela; 22.07.2020