Mongodb 2.6.0-rc2 und PHP 1.4.5 - finde _id $ in

8

Eine einfache Abfrage wie folgt:

%Vor%

funktioniert in mongodb 2.4.9, aber in 2.6.0-rc2 gibt dies Folgendes zurück:

%Vor%

Die Ausgabe von var_dump:

%Vor%

Ich frage mich, ob dies ein Mongo oder PHP ist?

Danke!

    
Pavel 30.03.2014, 18:28
quelle

2 Antworten

10

Dies ... ist eine Änderung in MongoDB 2.6.0, das bson -Objekt in der $in -Klausel nicht mehr akzeptiert.

Dieses spezielle Problem ist ein Tracker als ein PHP-Treiber-Bug bei Ссылка

Der MongoDB-PHP-Treiber wird ein PHP-Array in BSON-Array serialisieren (akzeptiert vom $ in-Operator), wenn das PHP-Array: Sequentiell numerisch indiziert ist, beginnend mit 0

Das bedeutet, wenn Sie ein Array haben wie:

%Vor%

und dann du

%Vor%

Sie beenden tatsächlich mit:

%Vor%

Was nicht mit Index 0 beginnt. Der MongoDB PHP-Treiber konvertiert das daher in ein BSON-Objekt ... Führt zu Validierungsfehler in MongoDB, wie es ein Array erwartet.

Da der MongoDB-PHP-Treiber Ihre MongoDB-Abfrage nicht analysiert, können wir nicht wissen, welches Array von dieser Serialisierungsregel ausgenommen werden sollte.

Die Problemumgehung besteht, wie oben erwähnt, darin sicherzustellen, dass Ihre PHP-Arrays numerisch indiziert werden, beginnend bei 0. Am einfachsten können Sie dazu

ausführen %Vor%     
bjori 09.04.2014 00:49
quelle
2

Nach dem Debuggen mit Mongo habe ich Folgendes bemerkt:

... Abfrage: {_id: {$ in: {0: Objekt-ID ('52214d60012f8aab278eaad1') ...

aber es sollte

sein

... Abfrage: {_id: {$ in: [Objekt-ID ('52214d60012f8aab278eaad1') ...

Ich würde vorschlagen, array_values ​​($ VAR) vor dem Aufruf von $ in zu benutzen. Ich nehme an, Mongo 2.4.9 ist milder gegenüber der Tatsache, dass $ id entweder ein Objekt oder ein Array sein kann mongo 2.6;)

    
Pavel 03.04.2014 21:35
quelle

Tags und Links