Patrząc na hexdump co kończy się w mongod, w porównaniu do tego, co wstawić powinna wyjaśnić wiele:
$ php -r 'echo inet_pton("127.0.0.1");'|hexdump
0000000 007f 0100
0000004
$ php -r 'echo base64_decode("BAAAAH8AAAE=");'|hexdump
0000000 0004 0000 007f 0100
0000008
To pokazuje, że oryginalne 4 bajty skończyć poprzedzony kolejne 4 bajty MongoDB. Powód tego można znaleźć w the BSON spec, podczas przechowywania pliku binarnego, pierwsze 4 bajty będą przechowywać długość wartości, którą zawiera.
Wskazuje to również, co to jest rozwiązanie; po trochę fiddling (nigdy nie używałem MongoDB), skończyło się z:
> db.test.find().forEach(function(d){
var h = d.ip.hex();
print(
parseInt(h.substr(8,2), 16)+'.'
+parseInt(h.substr(10,2), 16)+'.'
+parseInt(h.substr(12,2), 16)+'.'
+parseInt(h.substr(14,2), 16));
});
To spowoduje żądanego wyjścia: 127.0.0.1
Czy próbował to zrobić: 'foreach ($ Collection- > find() as $ el) { echo $ doc ['ip'] -> bin; } '. Myślę, że powinno to pomóc, ale nie mam php, aby to zweryfikować teraz, więc proszę dać mi znać, jak to działa. –
Ponadto, chyba że źle rozumiem pytanie, myślę, że powinieneś zmienić tytuł, ponieważ próbujesz pobrać wartość BinData używając PHP, nie używając powłoki Mongo. – wdberkeley
@wdberkeley hi, mam tylko ciąg "BAAAAH8AAAE =", jak uzyskać wartość początkową bez wstawiania/pobierania danych w mongodb – Hett