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

Perbaiki "$ pullAll memerlukan argumen array tetapi diberi ganda" di MongoDB

Jika Anda mendapatkan "$pullAll memerlukan argumen array tetapi diberi double ” error di MongoDB, karena Anda tidak memberikan array sebagai nilai untuk diganti.

Contoh

Misalkan kita memiliki koleksi dengan dokumen-dokumen berikut:

{ "_id" : 1, "bar" : [ 1, 7, 2, 3, 8, 7, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

Dan kami ingin menggunakan $pullAll untuk mengganti semua kemunculan nilai di salah satu dokumen tersebut.

Kode Masalah

Berikut contoh kode yang menyebabkan kesalahan di atas:

db.foo.update( 
  { _id: 1 }, 
  { $pullAll: { bar: 7 } } 
)

Hasil:

WriteResult({
	"nMatched" : 0,
	"nUpserted" : 0,
	"nModified" : 0,
	"writeError" : {
		"code" : 2,
		"errmsg" : "$pullAll requires an array argument but was given a double"
	}
})

Ini terjadi karena kita lupa mengapit nilai 7 dengan tanda kurung siku. Dengan kata lain, kami lupa menyediakan array.

Solusi

Berikut kode yang sama kecuali kali ini kami memberikan nilai sebagai array:

db.foo.update( 
  { _id: 1 }, 
  { $pullAll: { bar: [ 7 ] } } 
)

Hasil:

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

Ini menunjukkan kepada kita bahwa satu dokumen telah dicocokkan dan dimodifikasi.

Yuk intip koleksinya sekarang:

db.foo.find()

Hasil:

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

Dokumen telah berhasil diperbarui.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara mengizinkan semua host ke set replika di mongodb

  2. Nilai kenaikan Mongodb di dalam array bersarang

  3. (simpul:3341) Peringatan Penghentian:Mongoose:mpromise

  4. 'Field membutuhkan jenis kacang yang tidak dapat ditemukan.' error spring restful API menggunakan mongodb

  5. DB dengan kinerja sisipan/detik terbaik?