MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara menggunakan $elemMatch pada proyeksi agregat?

Cukup pada pertanyaan lama tetapi secara harfiah tidak ada jawaban yang diajukan yang bagus.

TLDR :

Anda tidak dapat menggunakan $elemMatch dalam tahap $project. tetapi Anda dapat mencapai hasil yang sama menggunakan operator agregasi lain seperti $filter.

db.itens.aggregate([
    {
        $project: {
            compList: {
               $filter: {
                input: "$complist",
                as: "item",
                cond: {$eq: ["$$item.a", 1]}
               }
            }
        }
    }
])

Dan jika Anda hanya menginginkan item pertama dari larik yang cocok dengan kondisi yang mirip dengan apa yang dilakukan $elemMatch, Anda dapat memasukkan $arrayElemAt

Penjelasan Mendalam :

Pertama mari kita pahami $elemMatch:

$elemMatch adalah ekspresi kueri sementara juga versi proyeksi ini ada, ini mengacu pada proyeksi kueri dan bukan tahap agregasi $project.

Terus? apa ini ada hubungannya? baik tahap $project memiliki struktur input tertentu yang dapat dimiliki sedangkan yang ingin kita gunakan adalah:

:

Apa itu ekspresi yang valid?

Ekspresi dapat mencakup jalur bidang, literal, variabel sistem, objek ekspresi, dan operator ekspresi. Ekspresi dapat disarangkan.

Jadi kami ingin menggunakan operator ekspresi, tetapi seperti yang Anda lihat dari $elemMatch dokumen bukan bagian darinya. maka itu bukan ekspresi yang valid untuk digunakan dalam agregasi $project panggung.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara menggunakan kembali koneksi ke Mongodb dengan benar di seluruh aplikasi dan modul NodeJs

  2. Bisakah Anda menentukan kunci untuk $addToSet di Mongo?

  3. $filter di dalam $project MongoDB Menggunakan Data Musim Semi

  4. tambahkan bidang create_at dan updated_at ke skema luwak

  5. Performa kueri MongoDB untuk lebih dari 5 juta catatan