MongoDB рдореЗрдВ 64 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ

рдЕрдкрдиреЗ 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)); // $nr is a string here var_dump($r['int64']); $r = $c->findOne(array('int64' => (int) $nr)); var_dump($r['int64']); ?> 


рдирд┐рд╖реНрдХрд░реНрд╖:

  рд╢реВрдиреНрдп
 int (12345678901234567) 


рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛рдПрдВ рдмрддрд╛рддреА рд╣реИрдВ рдХрд┐ рд╕рднреА рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдЦреНрдпрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:

PHP -> 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ MongoDB

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпрджреЗрд╢реА_рд▓рдВрдЧ = режрджреЗрд╢реА_рд▓рдВрдЧ = рез
1234567INT (1234567)INT (1234567)
123456789012FLOAT (123456789012)FLOAT (123456789012)
рдореЛрдВрдЧреЛрдЗрдВрдЯ 32 ("1234567")INT (1234567)INT (1234567)
рдореЛрдВрдЧреЛрдЗрдВрдЯ 64 ("123456789012")рд▓реЛрдВрдЧ (123456789012)рд▓реЛрдВрдЧ (123456789012)


PHP -> 64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ MongoDB

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпрджреЗрд╢реА_рд▓рдВрдЧ = режрджреЗрд╢реА_рд▓рдВрдЧ = рез
1234567INT (1234567)рд▓реЛрдВрдЧ (1234567)
123456789012рдХрдЪрд░рд╛рд▓реЛрдВрдЧ (123456789012)
рдореЛрдВрдЧреЛрдЗрдВрдЯ 32 ("1234567")INT (1234567)INT (1234567)
рдореЛрдВрдЧреЛрдЗрдВрдЯ 64 ("123456789012")рд▓реЛрдВрдЧ (123456789012)рд▓реЛрдВрдЧ (123456789012)


MongoDB -> 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ PHP

MongoDB рдореЗрдВlong_as_object = 0, native_long = 0long_as_object = 0, native_long = 1long_as_object = 1
INT (1234567)int (1234567)int (1234567)int (1234567)
рд▓реЛрдВрдЧ (123456789012)рдлреНрд▓реЛрдЯ (123456789012)MongoCursorExceptionрдореЛрдВрдЧреЛрдЗрдВрдЯ 64 ("123456789012")


MongoDB -> 64-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ PHP

MongoDB рдореЗрдВlong_as_object = 0, native_long = 0long_as_object = 0, native_long = 1long_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 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЧреБрдб рд▓рдХ!

рдкреБрдирд╢реНрдЪ рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ, рдХреГрдкрдпрд╛ рдЬреНрдпрд╛рджрд╛ рдордд рдорд╛рд░реЛ :)

Source: https://habr.com/ru/post/In117155/


All Articles