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

MongoDB $push

Di MongoDB, Anda dapat menggunakan $push operator untuk menambahkan nilai ke array.

Anda dapat menggunakan berbagai pengubah untuk menentukan posisi nilai dalam larik, urutan elemen dalam larik, menambahkan beberapa nilai, dll.

Contoh

Misalkan kita memiliki koleksi yang disebut products dengan dokumen sebagai berikut:

db.products.find() 

Hasil:

{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Topi" , "ukuran" :[ "S", "L", "XL" ] }{ "_id" :3, "produk" :"Tutup", "ukuran" :[ "M", "L" ] } 

Dan katakanlah kita ingin menambahkan nilai ke array di dokumen 3.

Kita bisa menggunakan $push dalam hubungannya dengan update() untuk menambahkan nilai:

db.products.update(
   { _id: 3 },
   { $push: { sizes: "XL" } }
) 

Keluaran:

WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

Mari kita lihat kembali koleksinya untuk memverifikasi perubahannya:

db.products.find() 

Hasil:

{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Topi" , "ukuran" :[ "S", "L", "XL" ] }{ "_id" :3, "produk" :"Tutup", "ukuran" :[ "M", "L", "XL" ] }

Masukkan Nilai pada Posisi Tertentu

Anda dapat menggunakan $each dan $position pengubah untuk menentukan di mana nilai harus dimasukkan ke dalam array.

Misalnya, kita dapat menggunakan nilai 0 untuk menyisipkannya di awal array.

Contoh:

db.products.update(
   { _id: 3 },
   { 
     $push: { 
        sizes: {
           $each: [ "S" ],
           $position: 0
        }
      } 
    }
) 

Keluaran:

WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

$each pengubah menambahkan beberapa nilai ke bidang array. Dalam hal ini kami hanya memasukkan satu nilai ke array, namun, untuk menggunakan $position pengubah, itu harus muncul dengan $each pengubah.

Yuk cek lagi koleksinya:

db.products.find() 

Hasil:

{ "_id" :1, "product" :"Bat", "sizes" :[ "S", "M", "L" ] }{ "_id" :2, "product" :"Topi" , "ukuran" :[ "S", "L", "XL" ] }{ "_id" :3, "produk" :"Tutup", "ukuran" :[ "S", "M", "L" , "XL" ] }

Tambahkan dan Urutkan

Misalkan kita memiliki koleksi dengan dokumen-dokumen berikut:

db.players.find() 

Hasil:

{ "_id" :1, "skor" :[ 1, 5, 3 ] }{ "_id" :2, "skor" :[ 8, 17, 18 ] }{ "_id" :3, "skor " :[ 15, 11, 8 ] }

Dan misalkan kita ingin menambahkan beberapa nilai ke array di dokumen 3, tetapi kita juga ingin mengurutkan array dalam urutan menaik setelah kita menambahkan nilainya.

Kita bisa melakukan ini:

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 5, 12 ],
           $sort: 1
        }
      } 
    }
) 

Keluaran:

WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

Sekarang ketika kita melihat koleksinya, kita dapat melihat bahwa dokumen ketiga telah dimodifikasi sesuai dengan itu.

db.players.find() 

Hasil:

{ "_id" :1, "skor" :[ 1, 5, 3 ] }{ "_id" :2, "skor" :[ 8, 17, 18 ] }{ "_id" :3, "skor " :[ 5, 8, 11, 12, 15 ] }

Untuk mengurutkannya dalam urutan menurun, gunakan $sort: -1 .

Iris Array

Anda dapat menggunakan $slice modifier untuk membatasi jumlah elemen dalam array.

Misalnya, mari tambahkan nilai lain ke larik, lalu potong larik ke sejumlah elemen tertentu.

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $slice: 3
        }
      } 
    }
) 

Keluaran:

WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

Sekarang mari kita periksa kembali koleksinya:

db.players.find() 

Hasil:

{ "_id" :1, "skor" :[ 1, 5, 3 ] }{ "_id" :2, "skor" :[ 8, 17, 18 ] }{ "_id" :3, "skor " :[ 5, 8, 11 ] }

Dalam hal ini, array diiris, tetapi nilai yang kami tambahkan bahkan tidak berakhir di array terakhir. Ini karena nilai telah ditambahkan ke array dan kami tidak menggunakan $sort operasi, sehingga nilainya tetap berada di akhir larik sebelum larik diiris ke tiga elemen pertamanya.

Ini dia lagi, kecuali kali ini dengan $sort pengubah.

db.players.update(
   { _id: 3 },
   { 
     $push: { 
        scores: {
           $each: [ 3 ],
           $sort: 1,
           $slice: 3
        }
      } 
    }
) 

Keluaran:

WriteResult({ "nMatched" :1, "nUpserted" :0, "nModified" :1 })

Cek koleksinya:

db.players.find() 

Hasil:

{ "_id" :1, "skor" :[ 1, 5, 3 ] }{ "_id" :2, "skor" :[ 8, 17, 18 ] }{ "_id" :3, "skor " :[ 3, 5, 8 ] }

Tambahkan Nilai hanya jika Tidak Ada

Jika Anda ingin nilai ditambahkan hanya jika belum ada dalam larik, pertimbangkan untuk menggunakan $addToSet operator.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $tarik

  2. Konkurensi di gopkg.in/mgo.v2 (Mongo, Go)

  3. Mengapa Mongoose memiliki skema dan model?

  4. Kamus python:menghapus karakter Anda

  5. Bagaimana cara saya terhubung ke mongodb dengan node.js (dan mengautentikasi)?