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

permintaan mongoDB untuk mengambil dari koleksi array bersarang

Anda memerlukan $elemMatch dan agregat .

db.users.aggregate([
    {
        $unwind: "$Sessions"
    },
    {
        $match: {
            "Sessions.Last_Login": {
                $gte: ISODate("2016-06-16T00:00:00.0Z"),
                $lt: ISODate("2016-06-17T00:00:00.0Z")
            }
        }
    },
    {
        $group: {
            _id: {
                _id: "$_id",
                First_Name: "$First_Name",
                Last_Name: "$Last_Name"
            },
            Sessions: {
                $push: "$Sessions"
            }
        }
    },
    {
        $project: {
            _id: "$_id._id",
            First_Name: "$_id.First_Name",
            Last_Name: "$_id.Last_Name",
            Sessions: "$Sessions"
        }
    }
])

Jadi kueri akan melakukan langkah-langkah itu:

  1. $unwind semua Sessions elemen
  2. $match dokumen dalam rentang tanggal
  3. $group bersama-sama dokumen dengan _id , First_Name , Last_Name
  4. $project dokumen agar terlihat seperti format aslinya

Saya menghilangkan beberapa bidang, tetapi Anda dapat dengan mudah menambahkannya di $group dan $project Langkah. Dan tentu saja Anda harus mengubah rentang tanggal.

Saya khawatir tentang kinerja kueri ini dalam koleksi besar. Mungkin lebih baik jika Anda menggunakan kueri pertama yang saya berikan dan memfilter sesi yang Anda inginkan dalam kode Anda.

Sunting:

Seperti yang dikatakan @chridam, kueri ini hanya akan berfungsi jika Anda mengubah Last_Login ke ISODate() , apa yang direkomendasikan.

Sunting 2

Memperbarui kueri untuk menggunakan aggregate dan cocokkan dengan permintaan hanya ambil Sessions dalam rentang tanggal.

Ini adalah versi lama:

db.users.filter({
    'Sessions': {
        '$elemMatch': {
            'Last_Login': {
                '$gte': ISODate("2016-06-16T00:00:00.0Z"),
                '$lt': ISODate("2016-06-17T00:00:00.0Z")
            }
        }
    }
})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Panduan MongoDB BSON

  2. Mengapa kinerja Mongodb lebih baik di Linux daripada di Windows?

  3. Spring-boot:perbandingan tanggal mongoDB tidak berfungsi

  4. Tiga A Keamanan MongoDB – Otentikasi, Otorisasi &Audit

  5. Bagaimana cara mengekstrak data NumberLong dari Mongodb menggunakan Node.js?