MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $set не актуализира запис

Правих някои разследвания защо се случва това. И не мисля, че мога да намеря начин как да "поправя" този проблем.

JavaScript има разлика между масиви и асоциативни масиви/обекти. PHP има разликата между масиви и обекти. За PHP асоциативният масив е масив, а за JavaScript е обект.

Когато PHP драйверът трябва да преобразува масив в JSON обект, той се опитва да разбере дали масивът е или:нормален масив с последователно номерирани ключове, започващи с 0; или асоциативен масив. Текущата реализация се отнася до всеки масив с последователно номерирани ключове, като се започне от 0 нормален масив. И нормалният масив не съдържа ключове . И това е проблемът. В ситуацията драйверът вижда нормален масив, няма информация за име на поле в BSON, който се изпраща на сървъра, и следователно сървърът не може да актуализира поле.

Не мога да измисля начин да променя това поведение, без да наруша някакъв съществуващ код. Така че, ако искате числови имена на полета, ще трябва да използвате обект stdClass за "основния документ". Като алтернатива можете да поставите тези ключове във вграден документ и след това да актуализирате:

<?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. Полета за актуализиране на MongoDB във вложен масив

  2. MongoError напишете EPIPE” в инсталацията на Parse-Server

  3. Множество условия за присъединяване с помощта на оператора $lookup

  4. mongoose рекурсивно попълване

  5. Как да превърна MongoDB заявка в JSON?