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

MongoDB $set tidak memperbarui catatan

Saya telah melakukan beberapa penyelidikan mengapa ini terjadi. Dan saya rasa saya tidak dapat menemukan cara untuk "memperbaiki" masalah ini.

JavaScript memiliki perbedaan antara array dan array/objek asosiatif. PHP memiliki perbedaan antara array dan objek. Untuk PHP array asosiatif adalah array, dan untuk JavaScript itu adalah objek.

Ketika driver PHP perlu mengonversi larik ke objek JSON, ia mencoba mencari tahu apakah larik adalah:larik normal dengan kunci bernomor urut yang dimulai dengan 0; atau array asosiatif. Implementasi saat ini menganggap array apa pun dengan kunci bernomor urut, mulai dari 0 array normal. Dan array normal tidak mengandung kunci . Dan inilah masalahnya. Dalam situasi driver melihat array normal, tidak ada informasi nama bidang di BSON yang dikirim ke server, dan karenanya server tidak dapat memperbarui bidang.

Saya tidak dapat memikirkan cara untuk mengubah perilaku ini tanpa melanggar kode apa pun yang ada. Jadi jika Anda menginginkan nama bidang numerik, Anda harus menggunakan objek stdClass untuk "dokumen utama". Atau, Anda dapat memasukkan kunci tersebut ke dalam dokumen yang disematkan dan kemudian memperbarui:

<?php
$m = new Mongo;
$collection = $m->demo->testcollection;

$collection->insert(array(
    "_id" => 'bug341',
    'data' => array( 0, 1, 1, 2, 3, 5 )
));

$obj = $collection->findOne();

$update = array('data.0' => 'zero int');

$collection->update(
    array( '_id' => 'bug341' ),
    array( '$set' => $update )
);


$obj = $collection->findOne();
var_dump($obj);
?>


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Membuat id objek pendek dan unik di MongoDB

  2. Permintaan untuk dokumen yang memiliki sub-bidang internal dari nilai yang diberikan

  3. MongoDB MapReduce - Memancarkan satu kunci/satu nilai tidak memanggil pengurangan

  4. Di Meteor.js, bagaimana saya memiliki dua proyek pengembangan menggunakan instance Mongo yang sama?

  5. Apakah Spring Data MongoDB mendukung fitur collation MongoDB 3.4?