MongoDB: рдЕрдиреБрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреНрд╖реЗрддреНрд░? рдЬреЗрдиреЗрд░рд┐рдХ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░


рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдкрд░ рдкреНрд░рднрд╛рд╡реА рдкреНрд░рд╢реНрди рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ:

{ _id: 123, firstName: "John", lastName: "Smith", age: 25, height: 6.0, dob: Date, eyes: "blue", sign: "Capricorn", ... } 


рдРрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдк рдЖрдВрдЦреЛрдВ рдХреЗ рд░рдВрдЧ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдКрдВрдЪрд╛рдИ, рдЕрдВрддрд┐рдо рдирд╛рдо рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓реЛрдЧреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдкрд╛рд╕ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЕрдкрдирд╛ рд╕реЗрдЯ рд╣реИ? рдЗрдВрдбреЗрдХреНрд╕ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред

рд╕рдорд╛рдзрд╛рди # 1: рдлреАрд▓реНрдб рдирд╛рдореЛрдВ рдФрд░ рдореВрд▓реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдпреМрдЧрд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХ


рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реАрд▓реНрдб рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВрдЧреЗ:

 { _id: 123, props: [ { n: "firstName", v: "John"}, { n: "lastName", v: "Smith"}, { n: "age", v: 25}, ... ] } 


рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдХреЗ рдЕрдВрджрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд╛рдо рдФрд░ рдореВрд▓реНрдп рд╕реЗ рдПрдХ рд╕рдордЧреНрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо prop9 0 рд╕реЗ prop0 рддрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЧреБрдгреЛрдВ рд╕реЗ рдпреБрдХреНрдд 5 рдорд┐рд▓рд┐рдпрди рджрд╕реНрддрд╛рд╡реЗрдЬ prop9 рдЬрд┐рдирдХрд╛ 0 рд╕реЗ 1000 рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдп рд╣реИред

 > for (var i = 0; i < 5000000; ++i) { var arr = []; for (var j = 0; j < 10; ++j) { arr.push({n: "prop" + j, v: Math.floor(Math.random() * 1000) }) }; db.generic.insert({props: arr}) } > db.generic.findOne() { "_id": ObjectId("515dd3b4f0bd676b816aa9b0"), "props": [ { "n": "prop0", "v": 40 }, { "n": "prop1", "v": 198 }, ... { "n": "prop9", "v": 652 } ] } > db.generic.ensureIndex({"props.n": 1, "props.v": 1}) > db.generic.stats() { "ns": "test.generic", "count": 5020473, "size": 1847534064, "avgObjSize": 368, "storageSize": 2600636416, "numExtents": 19, "nindexes": 2, "lastExtentSize": 680280064, "paddingFactor": 1, "systemFlags": 1, "userFlags": 0, "totalIndexSize": 1785352240, "indexSizes": { "_id_": 162898624, "props.n_1_props.v_1": 1622453616 }, "ok": 1 } 


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЖрдХрд╛рд░ 1.6 рдЬреАрдмреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдФрд░ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЪрд▓рд┐рдП рдЙрди рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ prop1 0 :

 > db.generic.findOne({"props.n": "prop1", "props.v": 0}) { "_id": ObjectId("515dd4298bff7c34610f6ae8"), "props": [ { "n": "prop0", "v": 788 }, { "n": "prop1", "v": 0 }, ... { "n": "prop9", "v": 788 } ] } > db.generic.find({"props.n": "prop1", "props.v": 0}).explain() { "cursor": "BtreeCursor props.n_1_props.v_1", "isMultiKey": true, "n": 49822, "nscannedObjects": 5020473, "nscanned": 5020473, "nscannedObjectsAllPlans": 5020473, "nscannedAllPlans": 5020473, "scanAndOrder": false, "indexOnly": false, "nYields": 0, "nChunkSkips": 0, "millis": 252028, "indexBounds": { "props.n": [ [ "prop1", "prop1" ] ], "props.v": [ [ { "$minElement": 1 }, { "$maxElement": 1 } ] ] }, "server": "agmac.local:27017" } 


рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдиреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджрд┐рдпрд╛: ~ 50,000 рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ 252 рд╕реЗрдХрдВрдб рдореЗрдВ рдкрд╛рдП рдЧрдПред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз n=prop1 рдФрд░ v=0 рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рдорд┐рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЖрд╡рд╢реНрдпрдХрддрд╛ n=prop1 рдФрд░ v=0 рджреЛрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдореЗрдВ n=prop1 рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдЙрдореНрдореАрджред рдЖрдк $elemMatch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 > db.generic.findOne({"props": { $elemMatch: {n: "prop1", v: 0} }}) 


рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ MongoDB v2.2 рдореЗрдВ рдХреНрд╡реЗрд░реА рдХрд┐рддрдиреА рджреЗрд░ рддрдХ рдЪрд▓рддреА рд╣реИ:

 > db.generic.find({"props": { $elemMatch: {n: "prop1", v: 0} }}).explain() { "cursor": "BtreeCursor props.n_1_props.v_1", "isMultiKey": true, "n": 5024, "nscannedObjects": 5020473, "nscanned": 5020473, "nscannedObjectsAllPlans": 5020473, "nscannedAllPlans": 5020473, "scanAndOrder": false, "indexOnly": false, "nYields": 0, "nChunkSkips": 0, "millis": 278784, "indexBounds": { "props.n": [ [ "prop1", "prop1" ] ], "props.v": [ [ { "$minElement": 1 }, { "$maxElement": 1 } ] ] }, "server": "agmac.local:27017" } 


рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ 5024 рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдзреАрд░реЗ-рдзреАрд░реЗ! explain рдХрдорд╛рдВрдб рд╕реЗ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд░реЗрдВрдЬ рдЕрднреА рднреА рдлрд╝реАрд▓реНрдб v рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк $elemMatch рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ $elemMatch рддреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХреНрд╡реЗрд░реА рд╢рд░реНрддреЛрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рднреА рд╕рдВрдпреЛрдЬрди рдЕрдВрддрд┐рдо рдЪрдпрди рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ MongoDB рдиреЗ рд╕рдВрд▓рдЧреНрди рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдмреА-рдЯреНрд░реА рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ ( $elemMatch рд▓рд┐рдП рдореБрдЦреНрдп рд╡реНрдпрд╡рд╣рд╛рд░) рдХреЛ $elemMatch ред рд▓реЗрдХрд┐рди $elemMatch рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдЗрддрдирд╛ рдзреАрдорд╛ рдХреНрдпреЛрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ? рдпрд╣ рдПрдХ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рдерд╛ рдЬреЛ рдХрд┐ MongoDB v2.4 рдореЗрдВ SERVER-3104 рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рд╣реА рдЕрдиреБрд░реЛрдз рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

 > db.generic.find({"props": { $elemMatch: {n: "prop1", v: 0} }}).explain() { "cursor": "BtreeCursor props.n_1_props.v_1", "isMultiKey": true, "n": 5024, "nscannedObjects": 5024, "nscanned": 5024, "nscannedObjectsAllPlans": 5024, "nscannedAllPlans": 5024, "scanAndOrder": false, "indexOnly": false, "nYields": 0, "nChunkSkips": 0, "millis": 21, "indexBounds": { "props.n": [ [ "prop1", "prop1" ] ], "props.v": [ [ 0, 0 ] ] }, "server": "agmac.local:27017" } 


рдЕрдиреБрд░реЛрдз 21 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛!

рд╕рдорд╛рдзрд╛рди # 2: рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪрдХрд╛рдВрдХ


рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдиреНрдп рддрд░реАрдХрд╛ property: value рд░реВрдк рдореЗрдВ рд╕реВрдЪреА рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╣реИ property: value рдСрдмреНрдЬреЗрдХреНрдЯред рдпрд╣ рд╕рдорд╛рдзрд╛рди MongoDB v2.2 рдФрд░ v2.4 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдлреЙрд░реНрдо рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдмрдирд╛рдПрдВ:

 > for (var i = 0; i < 5000000; ++i) { var arr = []; for (var j = 0; j < 10; ++j) { var doc = {}; doc["prop" + j] = Math.floor(Math.random() * 1000); arr.push(doc) }) }; db.generic2.insert({props: arr}) } > db.generic2.findOne() { "_id": ObjectId("515e5e6a71b0722678929760"), "props": [ { "prop0": 881 }, { "prop1": 47 }, ... { "prop9": 717 } ] } 


рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рдПрдБ:

 > db.generic2.ensureIndex({props: 1}) > db.generic2.stats() { "ns": "test.generic2", "count": 5000000, "size": 1360000032, "avgObjSize": 272.0000064, "storageSize": 1499676672, "numExtents": 19, "nindexes": 2, "lastExtentSize": 393670656, "paddingFactor": 1, "systemFlags": 1, "userFlags": 0, "totalIndexSize": 2384023488, "indexSizes": { "_id_": 162269072, "props_1": 2221754416 }, "ok": 1 } 


рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЖрдХрд╛рд░ ~ 2.2 рдЬреАрдмреА рдерд╛, рдЬреЛ рд╕рдорд╛рдзрд╛рди # 1 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 40% рдЕрдзрд┐рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд▓рдЧреНрди рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдмреАрдПрд╕рдУрдПрди рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдЦреБрдж рдХреЛ рдмреАрдПрд▓рдУрдмреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЕрдм рдХреНрд╡реЗрд░реА рдЪрд▓рд╛рдПрдБ:

 > db.generic2.find({"props": {"prop1": 0} }).explain() { "cursor": "BtreeCursor props_1", "isMultiKey": true, "n": 4958, "nscannedObjects": 4958, "nscanned": 4958, "nscannedObjectsAllPlans": 4958, "nscannedAllPlans": 4958, "scanAndOrder": false, "indexOnly": false, "nYields": 0, "nChunkSkips": 0, "millis": 15, "indexBounds": { "props": [ [ { "prop1": 0 }, { "prop1": 0 } ] ] }, "server": "agmac.local:27017" } 


рдЕрдиреБрд░реЛрдз 15 рдПрдордПрд╕ рдореЗрдВ рдкреВрд░рд╛ рд╣реБрдЖ, рдЬреЛ рдкрд╣рд▓реЗ рд╕рдорд╛рдзрд╛рди рд╕реЗ рддреЗрдЬ рд╣реИ! рд▓реЗрдХрд┐рди рдПрдХ рд╢рд░реНрдд рд╣реИ, рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдкреВрд░реЗ рдЙрдк-рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрди рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ prop1 0 рд╕реЗ 9 рддрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 > db.generic2.find({"props": { $gte: {"prop1": 0}, $lte: {"prop1": 9} }) 


рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдФрд░ рдпрд╣ рднреА рдХрд┐ рдпрджрд┐ рд╕рдВрд▓рдЧреНрди рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрд░реЛрдз рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд▓рдЧреНрди рджрд╕реНрддрд╛рд╡реЗрдЬ рдмреАрдПрд▓рдУрдмреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ)ред
рдПрдХ рдФрд░ рд╕реАрдорд╛ рднреА рд╣реИ: рдХреЗрд╡рд▓ рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЬрдмрдХрд┐ рд╕рдорд╛рдзрд╛рди # 1 рдореЗрдВ рдЖрдк 10 рдорд╛рди рдХреЗ рд╕рд╛рде рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП props.v рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдорд╛рдзрд╛рди # 2 рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

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


рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ MongoDB v2.4 рдЕрдм рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рдкреНрд░рднрд╛рд╡реА рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдЕрдкрдиреА "рдмрд┐рдЧ рдбреЗрдЯрд╛" рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles