Ë÷ÒýÀàÐÍ
MongDBµÄË÷Òý·ÖΪÒÔϼ¸ÖÖÀàÐÍ£ºµ¥¼üË÷Òý¡¢¸´ºÏË÷Òý¡¢¶à¼üË÷Òý¡¢µØÀí¿Õ¼äË÷Òý¡¢È«Îı¾Ë÷ÒýºÍ¹þÏ£Ë÷Òý
µ¥¼üË÷Òý(Single Field Indexes)
ÔÚÒ»¸ö¼üÉÏ´´½¨µÄË÷Òý¾ÍÊǵ¥¼üË÷Òý£¬µ¥¼üË÷ÒýÊÇ×î³£¼ûµÄË÷Òý£¬ÈçMongoDBĬÈÏ´´½¨µÄ_idµÄË÷Òý¾ÍÊǵ¥¼üË÷Òý¡£
Àý×Ó£º
{ "_id" : ObjectId(...), "name" : "Alice", "score" : 27 } |
Èç¹ûÒªÔÚÈçÉϵÄÎĵµÖд´½¨µ¥¼üË÷Òý£¬Óï¾äÈçÏ£º
db.users.ensureIndex( { "score" : 1 } ) |
Æä´æ´¢½á¹¹ÈçÏÂͼ£º

Èç¹ûÏëÒªÔÚ×ÓÎĵµµÄÒ»¸ö¼üÉϽ¨Á¢µ¥¼üË÷Òý£¬ÆäÀý×ÓÈçÏ£º
{ "_id": ObjectId(...), "name": "John Doe", "address": { "street": "Main", "zipcode": "53511", "state": "WI" } } |
½á¹¹ÈçÉÏ£¬Æä´´½¨Óï¾äÈçÏ£º
db.users.ensureIndex( { "address.zipcode": 1 } ) |
Èç¹ûÏëÒªÔÚÕû¸ö×ÓÎĵµÉϽ¨Á¢µ¥¼üË÷Òý£¬ÆäÀý×ÓÈçÏ£º
{ _id: ObjectId(...), metro: { city: "New York", state: "NY" }, name: "Giant Factory" } |
½á¹¹ÈçÉÏ£¬Æä´´½¨Óï¾äÈçÏ£º
db.factories.ensureIndex( { metro: 1 } ) |
ÏÂÃæµÄÓï¾äÄܹ»Ê¹ÓÃÆäË÷Òý²éÕÒµ½ÉÏÃæµÄÊý¾Ý£º
db.factories.find( { metro: { city: "New York", state: "NY" } } ) |
µ«ÔÙÏÂÃæµÄÕâÒ»ÌõÓï¾ä¾Í²é²»µ½Êý¾ÝÁË£¬ËµÃ÷×ÓÎĵµµÄ²éÕÒ±ØÐëÊǾ«È·Æ¥Å䣬°üÀ¨×ÓÎĵµÖеÄ˳Ðò£º
db.factories.find( { metro: { state: "NY", city: "New York" } } ) |
¸´ºÏË÷Òý(Compound Indexes)
ÔÚ¶à¸ö¼üÉϽ¨Á¢µÄË÷Òý¾ÍÊǸ´ºÏË÷Òý¡£
Àý×Ó£º
{ "_id": ObjectId(...), "userid": "aa1", "category": ["food", "produce", "grocery"], "location": "4th Street Store", "score": 4 } |
Èç¹ûÒªÔÚÈçÉϵÄÎĵµÖд´½¨¸´ºÏË÷Òý£¬Óï¾äÈçÏ£º
db.products.ensureIndex( { "userid": -1, "score": 1 } ) |
useridÊÇÕýÐòÅÅÁУ¬scoreÊÇÄæÐòÅÅÁеġ£Æä´æ´¢½á¹¹ÈçÏÂͼ£º

Õâ¸öË÷Òý¿ÉÒÔÖ§³ÖÈçϵÄÅÅÐò£º
db.products.find().sort( { userid: 1, score: -1 } )£» db.products.find().sort( { userid: -1, score: 1 } )£» db.products.find().sort( { userid: 1 } )£» db.products.find().sort( { userid: -1 } )£» |
²»ÄÜÖ§³ÖÈçϵÄÅÅÐò£º
db.products.find().sort( { userid: 1, score: 1 } )£» db.products.find().sort( { userid: -1, score: -1 } )£» db.products.find().sort( { score: 1 } )£» db.products.find().sort( { score: -1 } )£» |
¶à¼üË÷Òý(Multikey Index)
Èç¹ûÔÚÒ»¸öÊý×éÉÏÃæ´´½¨Ë÷Òý£¬MongoDB»á×Ô¼º¾ö¶¨£¬ÊÇ·ñÒª°ÑÕâ¸öË÷Òý½¨³É¶à¼üË÷Òý¡£
Èç¹ûÊý¾Ý½á¹¹ÈçÏ£¨Á½ÖÖ£©£º
{a: [1, 2], b: 1} {a: 1, b: [1, 2]} |
Äã¿ÉÒÔ´´½¨{ a: 1, b: 1 }£¬»áÊǶà¼ü¸´ºÏË÷Òý¡£
¶à¼üË÷Òý½á¹¹ÈçÏ£º

Àý×Ó£º
{ "_id" : ObjectId("..."), "name" : "Warm Weather", "author" : "Steve", "tags" : [ "weather", "hot", "record", "april" ] } |
Îĵµ½á¹¹ÈçÉÏ£¬Èç¹ûÄãÔÚtagsÉÏ´´½¨Ë÷Òý£¬¾Í»á´´½¨³ö¶à¼üË÷Òý
Èç¹ûÎĵµ½á¹¹ÈçÏ£º
{ "_id": ObjectId(...), "title": "Grocery Quality", "comments": [{ author_id: ObjectId(...), date: Date(...), text: "Please expand the cheddar selection." }, { author_id: ObjectId(...), date: Date(...), text: "Please expand the mustard selection." }, { author_id: ObjectId(...), date: Date(...), text: "Please expand the olive selection." }] } |
´´½¨{ "comments.text": 1 } Ë÷ÒýÒ²»áÊǶà¼üË÷Òý£¬ÇÒÔÚÈçϲéÕÒÓï¾äÖÐÓÐЧ£º
db.feedback.find( { "comments.text": "Please expand the olive selection." } ) |
µØÀí¿Õ¼äË÷Òý(Geospatial Indexes and Queries)
MongoDBÖ§³Ö¼¸ÖÖÀàÐ͵ĵØÀí¿Õ¼äË÷Òý¡£ÆäÖÐ×î³£ÓõÄÊÇ 2dsphere Ë÷Òý£¨ÓÃÓÚµØÇò±íÃæÀàÐ͵ĵØÍ¼£©ºÍ
2d Ë÷Òý£¨ÓÃÓÚÆ½ÃæµØÍ¼ºÍʱ¼äÁ¬ÐøµÄÊý¾Ý£©¡£
1) 2dsphere
2dsphere ÔÊÐíʹÓÃGeoJSON¸ñʽ£¨http://www.geojson.org£©Ö¸¶¨µã¡¢ÏߺͶà±ßÐΡ£
µã¿ÉÒÔÓÃÐÎÈç[longitude, latitude]£¨[¾¶È£¬ γ¶È]£©µÄÁ½¸öÔªËØµÄÊý×é±íʾ£º
{ "name" : "New York City", "loc" : { "type" : "Point", "coordinates" : [50, 2] } } |
Ïß¿ÉÒÔÓÃÒ»¸öÓɵã×é³ÉµÄÊý×éÀ´±íʾ£º
{ "name" : "Hudson River", "loc" : { "type" : "LineString", "coordinates" : [[0, 1], [0, 2], [1, 2]] } } |
¶à±ßÐÎÊÇÓÉÏß×é³ÉµÄÊý×éÀ´±íʾ£º
{ "name" : "New England", "loc" : { "type" : "Polygon", "coordinates" : [[[0, 1], [0, 2], [1, 2], [0, 1]]] } } |
2dsphere Ö§³Ö Point¡¢MultiPoint¡¢LineString¡¢MultiLineString¡¢Polygon¡¢MultiPolygon¡¢Geometry
Collection
loc ×ֶεÄÃû×Ö¿ÉÒÔÊÇÈÎÒâµÄ£¬µ«ÊÇÆäÖÐ×Ó¶ÔÏóÊÇÓÉ GeoJSON Ö¸¶¨µÄ£¬²»Äܸı䡣
ÔÚ ensureIndex ÖÐʹÓà 2dsphere Ñ¡Ïî¾Í¿ÉÒÔ´´½¨Ò»¸öµØÀí¿Õ¼äË÷Òý£º
db.world.ensureIndex({"loc": "2dsphere"}) |
¿ÉÒÔʹÓöàÖÖ²»Í¬µÄµØÀí¿Õ¼ä²éѯ£º½»¼¯£¨intersection£©¡¢°üº¬£¨within£©ÒÔ¼°½Ó½ü£¨nearness£©¡£²éѯʱ£¬ÐèÒª½«Ï£Íû²éÕÒµÄÄÚÈÝÖ¸¶¨ÎªÐÎÈç
{"$geometry":geoJsonDesc} µÄ GeoJSON ¶ÔÏó¡£
½»¼¯£¨intersection£©£¬Ê¹Óà $geoIntersects ²Ù×÷·û£º
var place = { "type" : "Polygon", "coordinates" : [[[0, 1], [0, 3], [50, 2], [0, 1]]] } db.world.find({"loc" : {"$geoIntersects" : {"$geometry" : place}}}) |
»á²éÕÒ³öËùÓÐÓë place Óн»¼¯µÄÎĵµ¡£
°üº¬£¨within£©£¬Ê¹Óà $within »òÕß $geoWithin
²Ù×÷·û£º
db.world.find({"loc" : {"$within" : {"$geometry" : place}}}) |
½Ó½ü£¨nearness£©£¬Ê¹Óà $near »òÕß $geoNear ²Ù×÷·û£º
var place = { "type" : "Point", "coordinates" : [0, 3] } db.world.find({"loc" : {"$near" : {"$geometry" : place}}}) |
place ±ØÐëÊǸöµã£¬$near ÊÇΨһһ¸ö»á¶Ô²éѯ½á¹û½øÐÐ×Ô¶¯ÅÅÐòµÄµØÀí¿Õ¼ä²Ù×÷·û£¬$near µÄ·µ»Ø½á¹ûÊǰ´ÕÕ¾àÀëÓɽü¼°Ô¶ÅÅÐòµÄ¡£
2) 2d
2d Ë÷ÒýÓÃÓÚ±âÆ½»¯±íÃæ£¬¶ø²»ÊÇÇòÌå±íÃæ£¬·ñÔò¼«µã¸½½ü»á³öÏÖ´óÁ¿µÄŤÇú±äÐΡ£
ÎĵµÖÐʹÓðüº¬Á½¸öÔªËØµÄÊý×é±íʾ 2d Ë÷Òý×ֶΣ¬²»ÊÇ GeoJSON
µÄ¸ñʽ¡£
{ "name": "Water Temple", "tile": [32, 22] } |
2d Ë÷ÒýÖ»ÄÜ¶Ôµã½øÐÐË÷Òý¡£¿ÉÒÔ±£´æÒ»¸öÓɵã×é³ÉµÄÊý×飬µ«ÊÇËüÖ»»á±»±£´æÎªÓɵã×é³ÉµÄÊý×飬²»»á±»µ±³ÉÏß¡£ÌرðÊǶÔ
$within ²éѯÀ´Ëµ£¬Êý×éÖеÄij¸öµãÔÚ²éѯ·¶Î§ÄÚ£¬¸ÃÎĵµ¾Í»á±»ÕÒ³ö¡£
ÔÚ ensureIndex ÖÐʹÓà 2d Ñ¡Ïî¾Í¿ÉÒÔ´´½¨Ò»¸öµØÀí¿Õ¼äË÷Òý£¬Ò²¿ÉÒÔÔÚÆäÖÐÉèÖÃ×î´ó×îС±ß½çÖµºÍ¾«¶È¡£Ä¬ÈÏÇé¿öÏ£¬×î´óÖµºÍ×îСֵµÄ·¶Î§ÊÇ[
-180 , 180 )£¬¾«¶ÈÊÇ26λµÄ¾«¶È£¬´óÖÂÏ൱ÓÚ2Ó¢³ß»ò60ÀåÃ׵ľ«¶È£º
db.places.ensureIndex({"tile" : "2d"}, {"min" : -90, "max" : 90, "bits" : 20}) |
Õâ»á´´½¨Ò»¸ö180*180´óСµÄ¿Õ¼äË÷Òý¡£
2d Ë÷ÒýµÄ²éѯ±È 2dsphere ¼òµ¥Ðí¶à£¬¿ÉÒÔÖ±½ÓʹÓÃ$near ºÍ $within£¬¶ø²»±Ø´øÓÐ
$geometry ×Ó¶ÔÏó£º
db.places.find({"tile": {"$near": [20, 21]}}).limit(10) |
Èç¹û²»¼Ó limit£¬Ä¬ÈÏ×î¶à·µ»Ø100Ìõ¡£
$within ¿ÉÒÔ²éѯ³öij¸öÐÎ×´ÀïµÄËùÓÐÎĵµ£¬¿ÉÒÔÊǾØÐΣ¨$box£©¡¢Ô²ÐΣ¨$center£©»òÕß¶à±ßÐΣ¨$polygon£©¡£
db.places.find({"tile": {"$within": {"$box": [[0, 0], [30, 30]]}}}) |
$box ½ÓÊÕÁ½¸öÔªËØ£¬µÚÒ»¸öÔªËØÊǾØÐεÄ×óϽÇ×ø±ê£¬µÚ¶þ¸öÔªËØÊǾØÐεÄÓÒÉϽÇ×ø±ê¡£
db.places.find({"tile": {"$within": {"$center": [[30, 30], 10]}}}) |
$center Ò²½ÓÊÕÁ½¸öÔªËØ£¬µÚÒ»¸öÔªËØÊÇÔ²ÐĵãµÄ×ø±ê£¬µÚ¶þ¸öÊÇÔ²µÄ°ë¾¶¡£
db.places.find({"tile": {"$within": {"$polygon": [[0, 0], [30, 30], [0, 25]]}}}) |
$polygon ½ÓÊÕ¶à¸öµã×é³ÉµÄÊý×飬ÓÃÀ´Ö¸¶¨¶à±ßÐΡ£
²»¹ÜÊÇ 2dsphere Ë÷Òý»¹ÊÇ 2d Ë÷Òý£¬¶¼¿ÉÒÔºÍÆäËû×Ö¶ÎÒ»Æð×é³É¸´ºÏË÷Òý£º
db.world.ensureIndex({"name": 1, "loc": "2dsphere"}) |
È«ÎÄË÷Òý(Text Indexes)
È«ÎÄË÷ÒýÓÃÓÚÔÚÎĵµÖÐËÑË÷Îı¾£¬ÎÒÃÇÒ²¿ÉÒÔʹÓÃÕýÔò±í´ïʽÀ´²éѯ×Ö·û´®£¬µ«Êǵ±Îı¾¿é±È½Ï´óµÄʱºò£¬ÕýÔò±í´ïʽËÑË÷»á·Ç³£Âý£¬¶øÇÒÎÞ·¨´¦ÀíÓïÑÔÀí½âµÄÎÊÌ⣨Èç
entry ºÍ entries Ó¦¸ÃËãÊÇÆ¥ÅäµÄ£©¡£Ê¹ÓÃÈ«ÎÄË÷Òý¿ÉÒԷdz£¿ìµØ½øÐÐÎı¾ËÑË÷£¬¾ÍÈçͬÄÚÖÃÁ˶àÖÖÓïÑÔ·Ö´Ê»úÖÆµÄÖ§³ÖÒ»Ñù¡£´´½¨Ë÷ÒýµÄ¿ªÏú¶¼±È½Ï´ó£¬È«ÎÄË÷ÒýµÄ¿ªÏú¸ü´ó¡£´´½¨Ë÷Òýʱ£¬Ðèºǫ́»òÀëÏß´´½¨¡£
{ "_id" : ObjectId("55a0e30427c9370e525032e9"), "content" : "This morning I had a cup of coffee.", "about" : "beverage", "keywords" : [ "coffee" ] } { "_id" : ObjectId("55a0e31027c9370e525032ea"), "content" : "Who doesn't like cake?", "about" : "food", "keywords" : [ "cake", "food", "dessert" ] } |
ÎĵµÈçÉÏËùʾ£¬ÔÚ content ÉÏ´´½¨È«ÎÄË÷Òý£º
db.article.ensureIndex({"content": "text"}) |
ʹÓÃÈ«ÎÄË÷Òý²éѯÄÚÈÝ£º
db.article.find({"$text": {"$search": "coffee"}}) |
Èç¹ûÒªÔÚËùÓÐ×Ö·û´®µÄ¼üÉϽøÐÐÎı¾ËÑË÷£¬ÇëʹÓÃͨÅä·û ($**) À´Ë÷ÒýËùÓеİüº¬×Ö·û´®µÄ¼ü¡£´´½¨ÁËÒ»¸ö
article ÖÐËùÓÐÎĵµµÄËùÓмüµÄ×Ö·û´®½øÐÐË÷ÒýµÄË÷Òý£¬ÇÒÃüÃûΪ TextIndex£º
db.article.ensureIndex({"$**": "text"}, {"name": "TextIndex"}) |
±»Ë÷ÒýµÄÊý¾ÝµÄĬÈÏÓïÑÔ¾ö¶¨ÁËÈçºÎ½âÎö´Ê¸ùÒÔ¼°ºöÂÔÍ£Ö¹´ÊµÄ¹æÔò¡£±»Ë÷ÒýÊý¾ÝµÄĬÈÏÓïÑÔÊÇÓ¢Óï¡£Èç¹ûÏ£ÍûÖ¸¶¨Ò»¸ö²»Í¬µÄÓïÑÔ£¬ÔÚ´´½¨È«ÎÄË÷ÒýʱʹÓÃ
default_language Ñ¡Ïî¡£
Ö§³ÖÈçÏÂÓïÑÔ£¨²»Ö§³ÖÖÐÎÄ£¬ÖÁÉÙÔÚ 2.6 µÄ°æ±¾ÖÐÊÇÕâÑùµÄ£©£º
da or danish nl or dutch en or english fi or finnish fr or french de or german hu or hungarian it or italian nb or norwegian pt or portuguese ro or romanian ru or russian es or spanish sv or swedish tr or turkish
|
×¢£ºÈç¹ûÄú½«ÓïÑÔÖ¸¶¨ÎªÖµ "none" £¬ÄÇô text search »áʹÓüòµ¥µÄ·Ö´ÊÆ÷£¬Ã»ÓÐÍ£Ö¹´ÊҲûÓÐÈ¡´Ê¸ù´¦Àí¡£
db.quotes.ensureIndex({"content": "text"}, {"default_language": "spanish"}) |
¹þÏ£Ë÷Òý(Hashed Index)
¹þÏ£Ë÷Òý¿ÉÒÔÖ§³ÖÏàµÈ²éѯ£¬µ«ÊǹþÏ£Ë÷Òý²»Ö§³Ö·¶Î§²éѯ¡£Äú¿ÉÄÜÎÞ·¨´´½¨Ò»¸ö´øÓйþÏ£Ë÷Òý¼üµÄ¸´ºÏË÷Òý»òÕß¶Ô¹þÏ£Ë÷ÒýÊ©¼ÓΨһÐÔµÄÏÞÖÆ¡£µ«ÊÇ£¬Äú¿ÉÒÔÔÚͬһ¸ö¼üÉÏͬʱ´´½¨Ò»¸ö¹þÏ£Ë÷ÒýºÍÒ»¸öµÝÔö/µÝ¼õ(ÀýÈ磬·Ç¹þÏ£)µÄË÷Òý£¬ÕâÑùMongoDB¶ÔÓÚ·¶Î§²éѯ¾Í»á×Ô¶¯Ê¹Ó÷ǹþÏ£µÄË÷Òý¡£
db.active.ensureIndex({"a": "hashed"}) |
ÉÏÃæµÄ²Ù×÷½«»áÔÚ active µÄ a ¼üÉÏ´´½¨Ò»¸ö¹þÏ£Ë÷Òý¡£
Ë÷ÒýÊôÐÔ
MongDBµÄË÷ÒýÊôÐÔÓÐÒÔϼ¸ÖÖ£ºTTLË÷Òý¡¢Î¨Ò»Ë÷ÒýºÍÏ¡ÊèË÷Òý¡£
TTLË÷Òý(TTL Indexes)
TTLË÷ÒýÊÇÒ»ÖÖÌØÊâË÷Òý£¬Í¨¹ýÕâÖÖË÷ÒýMongoDB»á¹ýÒ»¶Îʱ¼äºó×Ô¶¯ÒƳý¼¯ºÏÖеÄÎĵµ¡£Õâ¶ÔÓÚijЩÀàÐ͵ÄÐÅÏ¢À´ËµÊÇÒ»¸öºÜÀíÏëµÄÌØÐÔ£¬ÀýÈç»úÆ÷Éú³ÉµÄʼþÊý¾Ý¡¢ÈÕÖ¾¡¢»á»°ÐÅÏ¢µÈ£¬ÕâЩÊý¾Ý¶¼Ö»ÐèÒªÔÚÊý¾Ý¿âÖб£´æÓÐÏÞʱ¼ä¡£
TTLË÷ÒýÓÐÈçÏÂÏÞÖÆ£º
Ëü²»Ö§³Ö¸´ºÏË÷Òý¡£
±»Ë÷Òý¼ü±ØÐëÊÇÈÕÆÚÀàÐ͵ÄÊý¾Ý¡£
Èç¹ûÕâ¸ö¼ü´æ´¢µÄÊÇÒ»¸öÊý×飬ÇÒÔÚË÷ÒýÖÐÓжà¸öÈÕÆÚÀàÐ͵ÄÊý¾Ý(ºÍһƪÎĵµ¹ØÁª)£¬ÄÇôµ±ÆäÖÐ×îµÍ
(±ÈÈ磬×îÔç)¹ýÆÚ·§ÖµµÃµ½Æ¥Åäʱ£¬ÕâÆªÎĵµ¾Í»á¹ýÆÚʧЧÁË¡£
TTLË÷Òý²»Äܱ£Ö¤¹ýÆÚÊý¾Ý»á±»Á¢¿Ìɾ³ý¡£ÔÚÎĵµ¹ýÆÚºÍMongoDB´ÓÊý¾Ý¿âÖÐɾ³ýÎĵµÖ®¼ä£¬¿ÉÄÜ»áÓÐÑÓ³Ù¡£É¾³ý¹ýÆÚÊý¾ÝµÄºǫ́ÈÎÎñ
ÿ¸ô60Ãë ÔËÐÐÒ»´Î¡£ËùÒÔ£¬ÔÚÎĵµ¹ýÆÚ Ö®ºó ºÍ ºǫ́ÈÎÎñÔËÐлòÕß½áÊø ֮ǰ £¬Îĵµ»áÒÀÈ»´æÔÚÓÚ¼¯ºÏÖС£É¾³ý²Ù×÷µÄ³ÖÐøÊµ¼ÊÈ¡¾öÓÚÄúµÄ
mongod ʵÀýµÄ¸ºÔØ¡£Òò´Ë£¬ÔÚÁ½´Îºǫ́ÈÎÎñÔËÐеļä¸ô¼ä£¬¹ýÆÚÊý¾Ý¿ÉÄÜ»á¼ÌÐøÁôÔÚÊý¾Ý¿âÖг¬¹ý60Ãë¡£ÔÚÆäËû·½Ã棬TTLË÷ÒýÊÇÆÕͨË÷Òý£¬²¢ÇÒÈç¹û¿ÉÒԵϰ£¬MongoDB»áʹÓÃÕâЩË÷ÒýÀ´Æ¥ÅäÈÎÒâ²éѯ¡£
db.token.ensureIndex({"lastUpdated": 1}, {"expireAfterSecs": 60*60*24}) |
token ³¬¹ý24Сʱ¾Í»á±»É¾³ýµô¡£
ΨһË÷Òý(Unique Indexes)
ΨһË÷Òý¿ÉÒԾܾø±£´æÄÇЩ±»Ë÷Òý¼üµÄÖµÒÑ¾ÖØ¸´µÄÎĵµ¡£
db.members.ensureIndex({"user_id": 1}, {unique: true}) |
ĬÈÏÇé¿öÏ£¬MongoDBË÷ÒýµÄ unique ÊôÐÔÊÇ false ¡£Èç¹û¶Ô¸´ºÏË÷ÒýÊ©¼ÓΨһÐÔµÄÏÞÖÆ£¬ÄÇôMongoDB¾Í»áÇ¿ÖÆÒªÇó¸´ºÏÖµµÄΨһÐÔ£¬¶ø²»ÊÇ·Ö±ð¶Ôÿ¸öµ¥¶ÀµÄÖµÒªÇóΨһ¡£
ΨһÐÔµÄÏÞÖÆÊÇÕë¶ÔÒ»¸ö¼¯ºÏÖв»Í¬ÎĵµµÄ¡£Ò²¼´£¬Î¨Ò»Ë÷Òý¿ÉÒÔ·ÀÖ¹ ²»Í¬ ÎĵµµÄ±»Ë÷Òý¼üÉÏ´æ´¢Ïàֵͬ£¬µ«ÊÇËü²»½ûֹͬһƪÎĵµÔÚ±»Ë÷Òý¼ü´æ´¢µÄÊý×éÀï´æ´¢µÄÔªËØ»òÕßÄÚǶÎĵµÊÇÏàͬµÄÖµ¡£ÔÚͬһƪÎĵµ´æ´¢Öظ´Êý¾ÝµÄÇé¿öÏ£¬Öظ´µÄÖµÖ»»á±»´æÈëË÷ÒýÒ»´Î¡£
ÀýÈ磬һ¸ö¼¯ºÏÓÐÒ»¸öΨһË÷Òý a.b £º
db.collection.ensureIndex({"a.b": 1 }, {unique: true}) |
¼ÙÈçÔÚ¼¯ºÏÖÐûÓÐÆäËûµÄÎĵµµÄ a.b ¼üµÄÖµÊÇ 5 £¬ÄÇôΨһË÷Òý½«»áÔÊÐí½«ÒÔÏÂÎĵµ²åÈ뼯ºÏ£º
db.collection.insert({a: [{b: 5}, {b: 5}]}) |
Èç¹ûһƪÎĵµ²»°üº¬Î¨Ò»Ë÷ÒýµÄ±»Ë÷Òý¼ü£¬ÄÇôË÷ÒýĬÈÏ»áΪ¸ÃÎĵµ´æ´¢Ò»¸önullÖµ¡£ÓÉÓÚΨһÐÔµÄÏÞÖÆ£¬MongoDB½«Ö»ÔÊÐíÓÐһƪ¿ÉÒÔ²»°üº¬±»Ë÷Òý¼ü¡£Èç¹û³¬¹ýһƪÎĵµ²»°üº¬±»Ë÷Òý¼ü»òûÓÐÖµ£¬ÄÇô»áÅ׳ö¼üÖØ¸´(duplicate
key)´íÎóµ¼ÖÂË÷Òý´´½¨Ê§°Ü¡£¿ÉÒÔ×éºÏʹÓÃΨһÐÔºÍÏ¡ÊèË÷ÒýµÄÌØÐÔÀ´¹ýÂËÄÇЩ°üº¬nullÖµµÄÎĵµÒÔ±ÜÃâÕâ¸ö´íÎó¡£
Ï¡ÊèË÷Òý(Sparse Indexes)
Ï¡ÊèË÷Òý»áÌø¹ýËùÓв»°üº¬±»Ë÷Òý¼üµÄÎĵµ¡£Õâ¸öË÷ÒýÖ®ËùÒÔ³ÆÎª ¡°Ï¡Ê衱 ÊÇÒòΪËü²¢²»°üÀ¨¼¯ºÏÖеÄËùÓÐÎĵµ¡£ÓëÖ®Ïà·´£¬·ÇÏ¡ÊèµÄË÷Òý»áË÷ÒýÿһƪÎĵµ£¬Èç¹ûһƪÎĵµ²»º¬±»Ë÷Òý¼üÔòΪËü´æ´¢Ò»¸önullÖµ¡£
db.addresses.ensureIndex({"xmpp_id": 1}, {"sparse": true}) |
Èç¹ûÒ»¸öË÷Òý»áµ¼Ö²éѯ»òÕßÅÅÐòµÄ½á¹û¼¯ÊDz»ÍêÕûµÄ£¬ÄÇôMongoDB½«²»»áʹÓÃÕâ¸öË÷Òý£¬³ý·ÇÓû§Ê¹ÓÃ
hint() ·½·¨À´ÏÔʾָ¶¨Ë÷Òý¡£ÀýÈ磬²éѯ { x: { $exists: false } } ½«²»»áʹÓÃ
x ¼üÉϵÄÏ¡ÊèË÷Òý£¬³ý·ÇÏÔʾµÄhint¡£
2dsphere (version 2), 2d ºÍ text ÕâЩË÷Òý×ÜÊÇÏ¡ÊèµÄ¡£
ֻҪһƪÎĵµÀïÓÐÖÁÉÙÒ»¸ö±»Ë÷Òý¼ü£¬Ï¡ÊèÇÒÖ»°üº¬ÓеÝÔö/µÝ¼õË÷Òý¼üµÄ¸´ºÏË÷Òý¾Í»áË÷ÒýÕâÆªÎĵµ¡£
ÖÁÓÚÏ¡ÊèÇÒ°üº¬ÓеØÀíË÷Òý¼ü(ÀýÈç 2dsphere, 2d)ÒÔ¼°µÝÔö/µÝ¼õË÷Òý¼üµÄ¸´ºÏË÷Òý£¬Ö»ÓеØÀíË÷Òý¼üµÄ´æÔÚÓë·ñÄܾö¶¨Ò»ÆªÎĵµÊÇ·ñ±»Ë÷Òý¡£
ÖÁÓÚÏ¡ÊèÇÒ°üº¬ÁËÈ«ÎÄË÷Òý¼üºÍÆäËûµÝÔö/µÝ¼õË÷Òý¼üµÄ¸´ºÏË÷Òý£¬Ö»ÓÐÈ«ÎÄË÷Òý¼üµÄ´æÔÚÓë·ñÄܾö¶¨ÊÇ·ñË÷Òý¸ÃÎĵµ¡£
Ò»¸öÏ¡ÊèÇÒΨһµÄË÷Òý£¬¿ÉÒÔ·ÀÖ¹¼¯ºÏÖеÄÎĵµ±»Ë÷Òý¼üÖгöÏÖÖØ¸´Öµ£¬Í¬Ê±Ò²ÔÊÐí¶à¸öÎĵµÀï²»°üº¬±»Ë÷Òý¼ü¡£
|