рдЕрдкрдиреЗ PHP рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рд▓реЗрдЦ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд (рдХрднреА-рдХрднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ) рдФрд░ рд╕рднреА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреЛ рд╕рдордЭрд╛рддреЗ рд╣реБрдПред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рд╣реИрдмреЗ рдкрд░ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛редрд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣
MongoDB рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣рдг рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ RDBMS рдХреЗ рдмреАрдЪ рдПрдХ рдкреБрд▓ рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдлреЗрд╕рдмреБрдХ рдпреВрдЬрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ,
PHP рдХреЗ рд▓рд┐рдП MongoDB рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдерд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдирдП рдлреЗрд╕рдмреБрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реБрдИрдВред рд╢рд╛рдВрдд рдирдП рд▓рдВрдмреЗ UserID рдХреЛ 32 рдмрд┐рдЯреНрд╕ рдореЗрдВ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред
MongoDB рдЖрдВрддрд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП
BSON (рдмрд╛рдЗрдирд░реА
JSON ) рдирд╛рдордХ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред BSON рдореЗрдВ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ:
INT рдирд╛рдордХ рдПрдХ 32-рдмрд┐рдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░
LONG рдирд╛рдордХ 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдкреВрд░реНрдгрд╛рдВрдХред PHP рдХреЗ рд▓рд┐рдП MongoDB рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╣рддрд╛ рд╣реИ (рдпрд╛ рдЬрдм рдЖрдк рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдХреЗрд╡рд▓ 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рдЬреИрд╕реЗ "PHP 8-рдмрд╛рдЗрдЯ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред" рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред PHP рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ 64-рдмрд┐рдЯ рдорд╛рдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ C рдореЗрдВ
рд▓рдВрдмрд╛ рдкреНрд░рдХрд╛рд░ 64-рдмрд┐рдЯ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА 64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо (рдпрджрд┐ PHP рдХреЛ 64-рдмрд┐рдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рд╡рд┐рдВрдбреЛрдЬ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЬрд╣рд╛рдВ C рдореЗрдВ рд╕рдмрд╕реЗ
рд▓рдВрдмрд╛ рдкреНрд░рдХрд╛рд░ рд╣рдореЗрд╢рд╛ 32-рдмрд┐рдЯ рд╣реЛрддрд╛ рд╣реИред
рд╣рд░ рдмрд╛рд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ PHP рд╕реЗ MongoDB рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдбреНрд░рд╛рдЗрд╡рд░ рдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 32 рд╕рдмрд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ (64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░):
<?php $m = new Mongo(); $c = $m->selectCollection('test', 'inttest'); $c->remove(array()); $c->insert(array('number' => 1234567890123456)); $r = $c->findOne(); echo $r['number'], "\n"; ?>
рд╢реЛ:
int (1015724736)
рдмрд╛рдЗрдирд░реА рдлреЙрд░реНрдо рдореЗрдВ:
1234567890123456 = 10001100010101010100111100100010101010101011000000
1015724736 = 111100100010101010101011000000
рдЯреНрд░рд┐рдорд┐рдВрдЧ рдбреЗрдЯрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдорд╛рдирдХ PHP рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реАрдзреЗ MongoDB рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдмрджрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐ рдХреИрд╕реЗ MongoDB рдбреНрд░рд╛рдЗрд╡рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛
mongo.native_long рд╕реЗрдЯрд┐рдВрдЧ рдЬреЛрдбрд╝рд╛ - рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЕрдиреНрдпрдерд╛ рд╣рдо рдХреБрдЫ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
Mongo.native_long рд╕реЗрдЯрд┐рдВрдЧ
рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдХ рдЕрд▓рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ:
<?php ini_set('mongo.native_long', 1); $c->insert(array('number' => 1234567890123456)); $r = $c->findOne(); var_dump($r['number']); ?>
рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд┐рдЦрд╛рдПрдЧреА:
int (1234567890123456)
64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░,
mongo.native_long рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдЖрдк MongoDB рдореЗрдВ 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд MongoDB рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ BSON INT рдХреЗ рдмрдЬрд╛рдп BSON LONG рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред MongoDB рд╕реЗ рд╡рд╛рдкрд╕ рдкрдврд╝рдиреЗ рдкрд░ рд╕реЗрдЯрд┐рдВрдЧ BSON LONG рдбреЗрдЯрд╛ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рднреА рдмрджрд▓ рджреЗрддреА рд╣реИред
Mongo.native_long рд╕реЗрдЯрд┐рдВрдЧ
рд╕рдХреНрд╖рдо рдХрд┐рдП рдмрд┐рдирд╛, рдбреНрд░рд╛рдЗрд╡рд░ рд╕рднреА BSON LONG рдХреЛ PHP рдкреНрд░рдХрд╛рд░ рдлрд╝реНрд▓реЛрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╕рдЯреАрдХрддрд╛ рдХрд╛ рдиреБрдХрд╕рд╛рди рд╣реЛрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
<?php ini_set('mongo.native_long', 1); $c->insert(array('number' => 12345678901234567)); ini_set('mongo.native_long', 0); $r = $c->findOne(); var_dump($r['number']); ?>
рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд┐рдЦрд╛рдПрдЧреА:
рдлреНрд▓реЛрдЯ (1.2345678901235E + 16)
32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░, MongoDB рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╕рдордп
mongo.native_long рд╕реЗрдЯрд┐рдВрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИ: рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ BSON INT рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рдХреНрд╖рдо рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд╕рд╛рде MongoDB рд╕реЗ BSON LONG рдирдВрдмрд░ рдкрдврд╝рддреЗ рд╕рдордп, рдПрдХ
MongoCursorException рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реБрдП рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рд╕рдЯреАрдХрддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд┐рдирд╛ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
MongoCursorException: рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд▓рдВрдмреЗ 1234567890123456 рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдпрджрд┐ рд╕реЗрдЯрд┐рдВрдЧ рдмрдВрдж рд╣реИ, рддреЛ BSON LONG рдХреЛ PHP рдЯрд╛рдЗрдк рдлреНрд▓реЛрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддрд╛рдХрд┐ рдкрд┐рдЫрд▓реЗ рдбреНрд░рд╛рдЗрд╡рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЛ рди рдЦреЛрдПрдВред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐
mongo.native_long рд╕реЗрдЯрд┐рдВрдЧ рдЖрдкрдХреЛ 64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдпрд╣ 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рдмреАрдПрд╕рдПрдирдУ рд▓реЙрдиреНрдЧ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ - рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдХрд░ред
PHP рд╕реЗ MongoDB рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рджреЛ рдирдИ рдХрдХреНрд╖рд╛рдПрдВ рднреА рдЬреЛрдбрд╝ рджреАрдВ:
MongoInt32 рдФрд░
MongoInt64 ред рдпреЗ рджреЛ рд╡рд░реНрдЧ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕рд░рд▓ рдЖрд╡рд░рдг рд╣реИрдВред рд╡реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ:
<?php $int32 = new MongoInt32("32091231"); $int64 = new MongoInt64("1234567980123456"); ?>
рдЖрдк рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддрд░рд╣, рдбреЗрдЯрд╛ рдбрд╛рд▓рдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<?php $m = new Mongo(); $c = $m->selectCollection('test', 'inttest'); $c->remove(array()); $c->insert(array( 'int32' => new MongoInt32("1234567890"), 'int64' => new MongoInt64("12345678901234567"), )); $r = $c->findOne(); var_dump($r['int32']); var_dump($r['int64']); ?>
рдирд┐рд╖реНрдХрд░реНрд╖:
int (1234567890)
рдлреНрд▓реЛрдЯ (1.2345678901235E + 16)
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред BSON INT рдХреЛ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдПрдХ рдлреНрд▓реЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ BSON LONGред рдпрджрд┐ рд╣рдо
mongo.native_long рд╕реЗрдЯрд┐рдВрдЧ
рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ
MongoInt64 рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣рд┐рдд BSON LONG 64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкреВрд░реНрдгрд╛рдВрдХ PHP рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдФрд░ 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╣рдореЗрдВ MongoCursorException рдорд┐рд▓реЗрдЧреАред
32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ MongoDB рд╕реЗ 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧ -
mongo.long_as_object рдЬреЛрдбрд╝рд╛ред рдпрд╣ (рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░) MongoDB рд╕реЗ рдПрдХ
BSON рд▓реЙрдиреНрдЧ рдХреЛ MongoInt64 рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ред рдирд┐рдореНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╣ рджрд┐рдЦрд╛рддреА рд╣реИ:
<?php $m = new Mongo(); $c = $m->selectCollection('test', 'inttest'); $c->remove(array()); $c->insert(array( 'int64' => new MongoInt64("12345678901234567"), )); ini_set('mongo.long_as_object', 1); $r = $c->findOne(); var_dump($r['int64']); echo $r['int64'], "\n"; echo $r['int64']->value, "\n"; ?>
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдЙрдЯрдкреБрдЯ:
рдСрдмреНрдЬреЗрдХреНрдЯ (MongoInt64) # 7 (1) {
["рдорд╛рди"] =>
рд╕реНрдЯреНрд░рд┐рдВрдЧ (17) "12345678901234567"
}
12345678901234567
12345678901234567
MongoInt32 рдФрд░
MongoInt64 рдХрдХреНрд╖рд╛рдПрдВ __toString () рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЗрдХреЛ рджреНрд╡рд╛рд░рд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЖрдк рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ MongoDB рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕реЗ (64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░) рджрд┐рдЦрд╛рддреА рд╣реИ:
<?php ini_set('mongo.native_long', 1); $m = new Mongo(); $c = $m->selectCollection('test', 'inttest'); $c->remove(array()); $nr = "12345678901234567"; $c->insert(array('int64' => new MongoInt64($nr))); $r = $c->findOne(array('int64' => $nr));
рдирд┐рд╖реНрдХрд░реНрд╖:
рд╢реВрдиреНрдп
int (12345678901234567)
рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛рдПрдВ рдмрддрд╛рддреА рд╣реИрдВ рдХрд┐ рд╕рднреА рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдЦреНрдпрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:
PHP -> 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ MongoDBрдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп | рджреЗрд╢реА_рд▓рдВрдЧ = реж | рджреЗрд╢реА_рд▓рдВрдЧ = рез |
---|
1234567 | INT (1234567) | INT (1234567) |
123456789012 | FLOAT (123456789012) | FLOAT (123456789012) |
рдореЛрдВрдЧреЛрдЗрдВрдЯ 32 ("1234567") | INT (1234567) | INT (1234567) |
рдореЛрдВрдЧреЛрдЗрдВрдЯ 64 ("123456789012") | рд▓реЛрдВрдЧ (123456789012) | рд▓реЛрдВрдЧ (123456789012) |
PHP -> 64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ MongoDBрдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп | рджреЗрд╢реА_рд▓рдВрдЧ = реж | рджреЗрд╢реА_рд▓рдВрдЧ = рез |
---|
1234567 | INT (1234567) | рд▓реЛрдВрдЧ (1234567) |
123456789012 | рдХрдЪрд░рд╛ | рд▓реЛрдВрдЧ (123456789012) |
рдореЛрдВрдЧреЛрдЗрдВрдЯ 32 ("1234567") | INT (1234567) | INT (1234567) |
рдореЛрдВрдЧреЛрдЗрдВрдЯ 64 ("123456789012") | рд▓реЛрдВрдЧ (123456789012) | рд▓реЛрдВрдЧ (123456789012) |
MongoDB -> 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ PHPMongoDB рдореЗрдВ | long_as_object = 0, native_long = 0 | long_as_object = 0, native_long = 1 | long_as_object = 1 |
---|
INT (1234567) | int (1234567) | int (1234567) | int (1234567) |
рд▓реЛрдВрдЧ (123456789012) | рдлреНрд▓реЛрдЯ (123456789012) | MongoCursorException | рдореЛрдВрдЧреЛрдЗрдВрдЯ 64 ("123456789012") |
MongoDB -> 64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ PHPMongoDB рдореЗрдВ | long_as_object = 0, native_long = 0 | long_as_object = 0, native_long = 1 | long_as_object = 1 |
---|
INT (1234567) | int (1234567) | int (1234567) | int (1234567) |
рд▓реЛрдВрдЧ (123456789012) | рдлреНрд▓реЛрдЯ (123456789012) | int (123456789012) | рдореЛрдВрдЧреЛрдЗрдВрдЯ 64 ("123456789012") |
рдирд┐рд╖реНрдХрд░реНрд╖рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛, PHP рдореЗрдВ MongoDB рдХреЗ рд╕рд╛рде 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдПрдХ рдирд┐рд░рд░реНрдердХ рдмрд╛рдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ 64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореЗрд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
mongo.native_long = 1 рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рдирд╛ рд╣реИ ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдЬреЛ рднреА рдкреВрд░реНрдгрд╛рдВрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рд╡рд╣рд╛рдБ рд╕реЗ рдФрд░ рд╕рд╛рде рд╣реА рдкреВрд░реНрдгрд╛рдВрдХ рдЙрдирдХреЗ рдореВрд▓ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗ, рднрд▓реЗ рд╣реА рд╡реЗ 64-рдмрд┐рдЯ рд╣реЛрдВред
рдпрджрд┐ рдЖрдкрдХреЛ 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ (рдЗрд╕рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП 64-рдмрд┐рдЯ PHP рдмрд┐рд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИ!), рддреЛ рдЖрдк 64-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PHP рдореЗрдВ рдорд╛рдирдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЖрдкрдХреЛ MongoInt64 рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рд░реВрдкрдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╣ рднреА рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ MongoDB рдХрдВрд╕реЛрд▓ рд╕рднреА рдирдВрдмрд░реЛрдВ рдХреЛ рдлреНрд▓реЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реИ, рдФрд░ рдпрд╣ 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдлреНрд▓реЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдПрдЧрд╛ред рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВ, рдЗрд╕рд╕реЗ рдЙрдирдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж:
<?php $m = new Mongo(); $c = $m->selectCollection('test', 'inttest'); $c->remove(array()); $c->insert(array('int64' => new MongoInt64("123456789012345678")));
MongoDB (
рдореЛрдВрдЧреЛ ) рдХрдВрд╕реЛрд▓ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛:
$ рдореЛрдВрдЧреЛ
MongoDB рд╢реИрд▓ рд╕рдВрд╕реНрдХрд░рдг: 1.4.4
url: рдкрд░реАрдХреНрд╖рдг
рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдкрд░реАрдХреНрд╖рдг
рдорджрдж рдХреЗ рд▓рд┐рдП "help" рдЯрд╛рдЗрдк рдХрд░реЗрдВ
> рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
db рдкрд░реАрдХреНрд╖рдг рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛
> db.inttest.find ()
{"_id": ObjectId ("4c5ea6d59a14ce1319000000"), "int64": {"floatApprox": 123456789012345680, "рд╢реАрд░реНрд╖": 28454523, "рдиреАрдЪреЗ": 2788225870}}
рдмреЗрд╢рдХ, 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛:
ini_set('mongo.long_as_object', 1); $r = $c->findOne(); var_dump($r['int64']); ?>
рджрд┐рдЦрд╛рдПрдЧрд╛:
рдСрдмреНрдЬреЗрдХреНрдЯ (MongoInt64) # 7 (1) {
["рдорд╛рди"] =>
рд╕реНрдЯреНрд░рд┐рдВрдЧ (18) "123456789012345678"
}
рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛
mongo 1.0.9 рд░рд┐рд▓реАрдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ PECL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
pecl install mongo рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИред
рдЕрдкрдиреЗ 64 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЧреБрдб рд▓рдХ!
рдкреБрдирд╢реНрдЪ рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ, рдХреГрдкрдпрд╛ рдЬреНрдпрд╛рджрд╛ рдордд рдорд╛рд░реЛ :)