MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $set nie aktualizuje rekordu

Przeprowadzam dochodzenie, dlaczego tak się dzieje. I nie sądzę, żebym znalazł sposób, jak „rozwiązać” ten problem.

JavaScript różni się między tablicami a tablicami/obiektami asocjacyjnymi. PHP ma różnicę między tablicami a obiektami. Dla PHP tablica asocjacyjna jest tablicą, a dla JavaScript jest obiektem.

Kiedy sterownik PHP musi przekonwertować tablicę na obiekt JSON, próbuje ustalić, czy tablica jest:zwykłą tablicą z sekwencyjnie ponumerowanymi kluczami zaczynającymi się od 0; lub tablica asocjacyjna. Obecna implementacja dotyczy dowolnej tablicy z sekwencyjnie ponumerowanymi kluczami, zaczynając od 0 jako normalną tablicę. A normalna tablica nie zawiera kluczy . I to jest problem. W sytuacji, gdy kierowca widzi normalną tablicę, nie ma informacji o nazwie pola w BSON, który jest wysyłany do serwera, a zatem serwer nie może zaktualizować pola.

Nie mogę wymyślić sposobu na zmianę tego zachowania bez łamania jakiegokolwiek istniejącego kodu. Więc jeśli chcesz liczbowych nazw pól, będziesz musiał użyć obiektu stdClass dla "dokumentu głównego". Alternatywnie możesz wepchnąć te klucze do osadzonego dokumentu, a następnie zaktualizować:

<?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. Jak agregować MongoDB w Node.js

  2. Indeksowanie MongoDB dla aplikacji Parse Server

  3. Wpychaj przedmioty do tablicy mongo za pomocą mongoose

  4. Lokalizacja bazy danych mongodb na mac

  5. Jak uzyskać bazę danych Mongo określoną w parametrach połączenia w C#