sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $set neaktualizuje záznam

Provádím nějaké vyšetřování, proč se to děje. A nemyslím si, že dokážu najít způsob, jak tento problém „opravit“.

JavaScript má rozdíl mezi poli a asociativními poli/objekty. PHP má rozdíl mezi poli a objekty. Pro PHP je asociativní pole pole a pro JavaScript je to objekt.

Když ovladač PHP potřebuje převést pole na objekt JSON, pokusí se zjistit, zda pole je buď:normální pole se sekvenčně číslovanými klíči začínajícími 0; nebo asociativní pole. Aktuální implementace se týká libovolného pole se sekvenčně číslovanými klíči, počínaje od 0 jako normální pole. A normální pole neobsahuje klíče . A to je ten problém. V situaci, kdy ovladač vidí normální pole, nejsou v BSON, které se posílá na server, žádné informace o názvu pole, a proto server nemůže pole aktualizovat.

Nenapadá mě způsob, jak toto chování změnit, aniž bych narušil jakýkoli existující kód. Pokud tedy chcete číselná jména polí, budete muset pro "hlavní dokument" použít objekt stdClass. Případně můžete tyto klíče vložit do vloženého dokumentu a poté aktualizovat:

<?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. Jak získat den, měsíc a rok z data v SQL

  2. Nainstalujte ovladače phpMongo do systému Windows

  3. Řetězec Node.js Mongoose.js na funkci ObjectId

  4. vybrat odlišný mongodb C#