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

Bagaimana cara menarik satu instance item dalam array di MongoDB?

Jadi Anda benar bahwa $pull operator melakukan persis seperti yang dikatakan dokumentasi karena argumennya sebenarnya adalah "permintaan" yang digunakan untuk mencocokkan elemen yang akan dihapus.

Jika konten array Anda kebetulan selalu memiliki elemen di posisi "pertama" seperti yang Anda tunjukkan, maka $pop operator sebenarnya menghapus elemen pertama itu.

Dengan driver simpul dasar:

collection.findOneAndUpdate(
    { "array.0": "bird" },       // "array.0" is matching the value of the "first" element 
    { "$pop": { "array": -1 } },
    { "returnOriginal": false },
    function(err,doc) {

    }
);

Dengan luwak argumen untuk mengembalikan dokumen yang dimodifikasi berbeda:

MyModel.findOneAndUpdate(
    { "array.0": "bird" },
    { "$pop": { "array": -1 } },
    { "new": true },
    function(err,doc) {

    }
);

Namun keduanya tidak banyak berguna jika posisi larik item "pertama" yang dihapus tidak diketahui.

Untuk pendekatan umum di sini Anda memerlukan pembaruan "dua", menjadi satu untuk mencocokkan item pertama dan menggantinya dengan sesuatu yang unik untuk dihapus, dan yang kedua untuk benar-benar menghapus item yang dimodifikasi itu.

Ini jauh lebih sederhana jika menerapkan pembaruan sederhana dan tidak meminta dokumen yang dikembalikan, dan juga dapat dilakukan secara massal di seluruh dokumen. Ini juga membantu untuk menggunakan sesuatu seperti async.series untuk menghindari panggilan Anda bersarang:

async.series(
    [
        function(callback) {
            collection.update(
                { "array": "bird" },
                { "$unset": { "array.$": "" } },
                { "multi": true }
                callback
            );
        },
       function(callback) {
           collection.update(
                { "array": null },
                { "$pull": { "array": null } },
                { "multi": true }
                callback
           );
       }
    ],
    function(err) {
       // comes here when finished or on error   
    }
);

Jadi gunakan $unset di sini dengan posisi $ operator mengizinkan item "pertama" diubah menjadi null . Kemudian query berikutnya dengan $pull hapus saja null entri dari larik.

Begitulah cara Anda menghapus kemunculan nilai "pertama" dengan aman dari sebuah array. Untuk menentukan apakah array itu berisi lebih dari satu nilai yang sama adalah pertanyaan lain.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara Mengabaikan Kesalahan Kunci Duplikat dengan Aman Menggunakan insert_many

  2. Apa konvensi penamaan untuk MongoDB?

  3. Draft.js - Tidak bisa mendapatkan data dari database. Kesalahan lintas-asal

  4. MongoDB $dateFromParts

  5. Dokumen Baca dan sisipkan dengan penguncian/transaksi di nodejs dengan mongodb