µÚ1ÕÂ
MongoDBµÄ°²×°
1.1 MongoDB¼ò½é
MongoDBÊÇÒ»¸ö»ùÓÚ·Ö²¼Ê½Îļþ´æ´¢µÄÊý¾Ý¿â¿ªÔ´ÏîÄ¿¡£ÓÉC++ÓïÑÔ±àд£¬Ö¼ÔÚΪWEBÓ¦ÓÃÌṩ¿É»¤Õ¹µÄ¸ßÐÔÄÜÊý¾Ý´æ´¢½â¾ö·½°¸¡£
ËüµÄÌØµãÊÇ¿ÉÀ©Õ¹£¬¸ßÐÔÄÜ£¬Ò×ʹÓã¬Ä£Ê½×ÔÓÉ£¬´æ´¢Êý¾Ý·Ç³£·½±ãµÈ¡£
1.1.1 Ö÷Òª¹¦ÄÜÌØÐÔ
a)ÃæÏòÎĵµ´æ´¢£º(ÀàJSONÊý¾Ýģʽ¼òµ¥¶øÇ¿´ó)¡£
b)¸ßЧµÄ´«Í³´æ´¢·½Ê½£ºÖ§³Ö¶þ½øÖÆÊý¾Ý¼°´óÐͶÔÏó£¨ÈçÕÕÆ¬ºÍÊÓÆµ£©¡£
c)¸´ÖƼ°×Ô¶¯¹ÊÕÏ×ªÒÆ£ºMongoÊý¾Ý¿âÖ§³Ö·þÎñÆ÷Ö®¼äµÄÊý¾Ý¸´ÖÆ£¬Ö§³ÖÖ÷-´Óģʽ¼°·þÎñÆ÷Ö®¼äµÄÏ໥¸´ÖÆ¡£
d)Auto-Sharding×Ô¶¯·ÖƬ֧³ÖÔÆ¼¶À©Õ¹ÐÔ£¨´¦ÓÚÔçÆÚalpha½×¶Î£©£º×Ô¶¯·ÖƬ¹¦ÄÜÖ§³ÖˮƽµÄÊý¾Ý¿â¼¯Èº£¬¿É¶¯Ì¬Ìí¼Ó¶îÍâµÄ»úÆ÷¡£
e)¶¯Ì¬²éѯ£ºËüÖ§³Ö·á¸»µÄ²éѯ±í´ïʽ¡£²éѯָÁîʹÓÃJSONÐÎʽµÄ±ê¼Ç£¬¿ÉÇáÒײéѯÎĵµÖÐÄÚǶµÄ¶ÔÏó¼°Êý×é¡£
f)È«Ë÷ÒýÖ§³Ö£º°üÀ¨ÎĵµÄÚǶ¶ÔÏó¼°Êý×é¡£MongoµÄ²éѯÓÅ»¯Æ÷»á·ÖÎö²éѯ±í´ïʽ£¬²¢Éú³ÉÒ»¸ö¸ßЧµÄ²éѯ¼Æ»®¡£
g)Ö§³ÖRUBY£¬PYTHON£¬JAVA£¬C++£¬PHPµÈ¶àÖÖÓïÑÔ¡£
1.1.2 ÊÊÓó¡¾°
a)ÊʺÏʵʱµÄ²åÈ룬¸üÐÂÓë²éѯ£¬²¢¾ß±¸Ó¦ÓóÌÐòʵʱÊý¾Ý´æ´¢ËùÐèµÄ¸´ÖƼ°¸ß¶ÈÉìËõÐÔ¡£
b)ÊʺÏ×÷ΪÐÅÏ¢»ù´¡ÉèÊ©µÄ³Ö¾Ã»¯»º´æ²ã¡£
c)ÊʺÏÓÉÊýÊ®»òÊý°Ų̀·þÎñÆ÷×é³ÉµÄÊý¾Ý¿â¡£ÒòΪMongoÒѾ°üº¬¶ÔMapReduceÒýÇæµÄÄÚÖÃÖ§³Ö¡£
d)MongoµÄBSONÊý¾Ý¸ñʽ·Ç³£ÊʺÏÎĵµ»¯¸ñʽµÄ´æ´¢¼°²éѯ¡£
1.1.3 ²»ÊÊÓó¡¾°
a)¸ß¶ÈÊÂÎñÐÔµÄϵͳ¡£
b)´«Í³µÄÉÌÒµÖÇÄÜÓ¦Óá£
c)¼¶Îª¸´ÔÓµÄSQL²éѯ¡£
1.2 Windows»·¾³°²×°
1.2.1 ÏÂÔØtar°ü
mongodb-win32-x86_64-2.4.6¡£
1.2.2 ÅäÖÃÎļþ
´´½¨logÎļþ¼Ð
md D:\mongodb-win32-x86_64-2.4.6 \log |
´´½¨MongoDBµÄlogpathÑ¡ÏîµÄÅäÖÃÎļþ£º
echo logpath=d:\mongodb-win32-x86_64-2.4.6\log\mongo.log > d:\mongodb-win32-x86_64-2.4.6\mongod.cfg |
1.2.3 ÊÖ¶¯Æô¶¯
Æô¶¯·þÎñ
mongod --dbpath d:\mongodb_data »ò mongod --config d:\mongodb-win32-x86_64-2.4.6\mongod.cfg |
1.2.4 ·þÎñÆô¶¯
°²×° MongoDB ³ÌÐò×÷ΪWindows ·þÎñ¡£
°²×° MongoDB ·þÎñ mongod --config d:\mongodb-win32-x86_64-2.4.6\mongod.cfg --install ÔËÐÐ MongoDB ·þÎñ net start MongoDB ÒÆ³ý·þÎñ mongod --remove |
1.2.5 REST is not enabled
µ±³öÏÖÒÔÏ´íÎóʱ
REST is not enabled. use --rest to turn on. check that
port 28017 is secured for the network too.
½â¾ö°ì·¨£º
ʹÓÃÃüÁîÐÐÆô¶¯Ê±£º
mongod --dbpath d:\mongodb_data --rest --port 27017 |
ÖØÐ°²×°ÏµÍ³·þÎñ£º
mongod --dbpath d:\mongodb_data --config d:\mongodb-win32-x86_64-2.4.6\mongod.cfg --rest --port 27017 --install |
1.3 Linux»·¾³°²×°
1.3.1 ÏÂÔØ°ütgz
mongodb-linux-i686-2.4.6.tgz
1.3.2 ´´½¨Óû§
´´½¨Óû§
adduser mongodb passwd mongodb |
1.3.3 ´´½¨Êý¾Ý¿âÎļþ
´´½¨Êý¾Ý¿âÎļþ
mkdir -p /data/mongodb_data chown mongodb /data/mongodb_data ¨CR chgrp mongodb /data/mongodb_data -R |
1.3.4 ÅäÖÃÎļþ
´´½¨logÎļþ¼Ð
mkdir /opt/mongodb/mongodb-linux-i686-2.4.6/logs |
´´½¨MongoDBµÄlogpathÑ¡ÏîµÄÅäÖÃÎļþ£º
echo /opt/mongodb/mongodb-linux-i686-2.4.6/bin/mongod --dbpath /data/mongodb_data/
--logpath /opt/mongodb/mongodb-linux-i686-2.4.6/logs/mongodb.log --rest --port 27017 |
1.3.5 ÊÖ¶¯Æô¶¯
Æô¶¯·þÎñ
1.3.6 ·þÎñÆô¶¯
°²×° MongoDB ³ÌÐò×÷ΪLinux ·þÎñ¡£
°²×° MongoDB ·þÎñ
echo /opt/mongodb/mongodb-linux-i686-2.4.6/bin/mongod --dbpath
/data/mongodb_data/ --logpath /opt/mongodb/mongodb-linux-i686-2.4.6/logs
/mongodb.log --rest --port 27017¨Cfork >> /etc/rc.local |
1.4 Á´½ÓÊý¾Ý¿â
ʹÓÃÃüÁîÐз½Ê½£¬²¢´´½¨studentÊý¾Ý¿â
ÃüÁîÐÐÁ´½Ó²¡´´½¨Êý¾Ý¿â
ÔÚStudentÊý¾Ý¿âÖУ¬´´½¨user¼¯ºÏ£¬²åÈëÒ»ÌõÎĵµ
ÔÚStudentÊý¾Ý¿â²åÈëÒ»ÌõÊý¾Ý²¢²éѯ
db.user.save({username: "limingnihao", nickname: "ÀèÃ÷ÄãºÃ", password: "123456"}) |
1.5 ²Ù×÷ÃüÁî

1.6 Êý¾ÝÀàÐÍ

ObjectIdÀàÐͽṹ£º

µÚ2Õ MongoDBµÄÔöɾ¸Ä²é
MongoDBÖÐÊý¾ÝµÄ»ù±¾µ¥Ôª½Ð×öÎĵµ£¬²ÉÓÃjsonµÄ¼ü-ÖµµÄ·½Ê½¡£¶à¸ö¼ü¼°Æä¹ØÁªµÄÖµÓÐÐòµÄ´æ·ÅÔÚÒ»Æð±äÊÇÎĵµ¡£ÀàËÆÓÚ±à³ÌÓïÑÔÖеļüÖµ¹ØÏµ¡£MongoDBÎĵµ¶¼ÊÇBSONÎĵµ£¬ËûÊÇÒ»¸öJSONµÄ¶þ½øÖÆÐÎʽ¡£
MongoDBµÄÎĵµ

MongoDBÖÐÎĵµ±»´æ´¢ÔÚ¼¯ºÏÖС£¼¯ºÏÊÇÒ»×éÓйØÏµË÷ÒýµÄÎĵµ¡£¼¯ºÏÀàËÆÓÚ¹ØÏµÊý¾Ý¿âÖÐµÄ±í¡£
MongoDBµÄ¼¯ºÏ

2.1 ·½·¨²Î¿¼
²éѯÓα귽·¨


2.2 Insert()
db.collection.insert(document) |
Insert()·½·¨ÓÐÒÔÏÂÐÐΪ£º
Èç¹û¸Ã¼¯ºÏ²»´æÔÚ£¬insert()·½·¨½«´´½¨¼¯ºÏ¡£
Èç¹ûÎĵµÃ»ÓÐÖ¸¶¨Ò»¸ö_idºó׺×ֶΣ¬È»ºó MongoDB ½«Ìí¼ÓÒ»¸ö_id×ֶβ¢Ê¹ÓÃObjectIdΪÎĵµ·ÖÅäȡֵ¡£
Èç¹ûÎĵµÐèÒªÔö¼ÓÒ»¸öеÄ×ֶΣ¬Ôòinsert()·½·¨¿ÉÒÔΪÎĵµ²åÈëеÄ×ֶΡ£Õâ²»ÐèÒª¸ü¸Ä¼¯ºÏµÄÊý¾ÝÄ£ÐÍ»òÏÖÓеÄÎĵµ¡£
db.user.insert({_id: "1", name:{username: "limingnihao", nickname: "ÀèÃ÷ÄãºÃ"}, password: "123456"}) db.user.insert({_id: "2", name:{username: "zhoujielun", nickname: "ÖܽÜÂ×"},
password: "123456", birth: ISODate('1979-01-18')}) db.user.insert({_id: "3", name:{username: "caiyilin", nickname: "²ÌÒÀÁÖ"},
password: "123456", birth: ISODate('1980-09-15'), special:["¿´ÎÒ72±ä", "»¨ºûµû", "ÌØÎñJ"], regionName: "̨Íå"}) |
2.3 Save()
db.collection.save(document) |
²åÈëÒ»¸öеÄÎĵµ£¬»òÕ߸ù¾ÝÆäÎĵµµÄ²ÎÊý¸üÐÂÏÖÓеÄÎĵµ¡£
Èç¹ûÎĵµ²»°üº¬Ò»¸ö_idµÄ×ֶνøÐÐsaveʱ£¬mongod½«ÏòÎĵµÖÐÌí¼ÓÒ»¸ö_id×ֶβ¢½«Æä·ÖÅäÒ»¸öObjectId¡£
Èç¹ûÎĵµÖаüº¬Ò»¸ö_id×ֶκÍÖµ½øÐÐsave ()·½·¨Ê±£¬ÔòÔÚ¼¯ºÏÖвéѯ´Ë_idµÄÎĵµÖ´ÐеÄÊÇupsert²Ù×÷¡£Èç¹û¼¯ºÏÖв»´æÔÚ¾ßÓÐÖ¸¶¨µÄ_idÖµµÄÎĵµ£¬save
()·½·¨Ö´ÐеÄÊÇinsert²Ù×÷¡£save ()·½·¨Ö´ÐÐʱ»á½«ÏÖÓÐÎĵµÖеÄËùÓÐ×ֶζ¼Ì滻ΪÐÂÎĵµÖÐ×ֶΡ£
db.user.save({_id: "1", name:{username: "limingnihao", nickname: "ÀèÃ÷ÄãºÃ"}, password: "123456", birth: ISODate('1985-07-15')}) |
2.4 Update()
db.collection.update( <query>, <update>, <upsert>, <multi> ) |
ÐÞ¸ÄÏÖÓдæÔÚµÄÎĵµ»ò¼¯ºÏʱʹÓá£
ĬÈϵÄupdate()·½·¨Öµ¸üе¥¸öÎĵµ¡£µ«ÊÇÈç¹ûmulti²ÎÊýÉèÖÃΪtrue£¬Ôò¸üвÙ×÷¿ÉÒÔ¸üÐÂÈ«²¿·ûºÏÌõ¼þµÄÎĵµ¡£
Query ¨C ÀàÐÍ£ºÎĵµ£»ÓÃÓÚ¸üÐÂÑ¡Ôñ¹ýÂË¡£
Update ¨C ÀàÐÍ£ºÎĵµ£»ÐèÒª¸üеÄÎĵµµÄÄÚÈÝ¡£
Upsert ¨C ÀàÐÍ£ºÎĵµ»òboolean£»ÉèÖÃΪtrueʱ£¬µ±²éѯûÓÐÆ¥Åäµ½ÎĵµÊ±½øÐÐн¨¡£Ä¬ÈÏֵΪfalse
Multi: - ÀàÐÍ£ºÎĵµ»òboolean£»ÉèÖÃΪtrueʱ£¬Ôò¸üÐÂÂú×ã²éѯÌõ¼þµÄËùÓÐÎĵµ(¶à¸ö)¡£ÉèÖÃΪfalseʱֻ¸üе¥¸öÎĵµ¡£Ä¬ÈÏΪfalse¡£
×ֶθüвÙ×÷·½Ê½

db.user.update({_id: "1"}, {$inc:{age: 1}}, {multi:true}) db.user.update({_id: "1"}, { $rename: { 'password': 'pwd'}}) db.user.update({_id: "4"}, { $setOnInsert: { works: 5}}, {upsert: true}) db.user.update({_id: "1"}, {$set:{password: "654321", age: 28}}) db.user.update({_id: "4"},{$unset: {"works": 5 }}) |
2.5 Find()
db.collection.find(<criteria>, <projection>) db.collection.findOne(<criteria>, <projection>) |
Criteria - ÀàÐÍ£ºÎĵµ£»¿ÉÑ¡£¬ÎĵµµÄ²éѯ¹ýÂËÌõ¼þ¡£
Projection - ÀàÐÍ£ºÎĵµ£¬¶Ô½á¹û½øÐÐ×Ö¶ÎÆ¥Å䣬{ field1: <boolean>,
field2: <boolean> ... }¡£
ºóÃæ»¹¿ÉÒÔ£ºSort()ÅÅÐò¡¢Limit()ÏÞÖÆ¸öÊý¡¢Skip()Æðʼµã¡£
db.collection.find(<criteria>, <projection>)·µ»Ø¼¯ºÏ db.collection.findOne(<criteria>, <projection>)·µ»ØÒ»¸ö db.user.find({_id: "1"}) db.user.find({works: 5}) db.user.find().sort({age:1}) db.user.find().limit(2).sort({age:1}) db.user.find().skip(1).limit(2).sort({age:1}) |
2.6 Remove()
db.collection.remove(query, justOne) |
Query ¨C ÀàÐÍ£ºÎĵµ£»ÓÃÓÚɾ³ýÑ¡Ôñ¹ýÂË¡£
JustOne ¨C ÀàÐÍ£ºboolean£»µ±ÉèÖÃΪtrueʱֻɾ³ýÒ»¸öÎĵµ¡£
db.user.remove({_id: "4"}, true) |
2.7 Count()
db.collection.count(<query>) |
Query ¨C ÀàÐÍ£ºÎĵµ£»ÓÃÓÚ²éѯѡÔñ¹ýÂË¡£
2.8 Distinct()
db.collection.distinct(field, query) |
Field ¨C ÀàÐÍ£º×Ö·û´®£»·µ»Ø·ÇÖØ¸´µÄ×ֶΡ£
Query ¨C ÀàÐÍ£ºÎĵµ£»²éѯÌõ¼þ¡£
db.user.distinct("_id", {age: 1}) |
µÚ3Õ MongoDBµÄJavaÇý¶¯
3.1 ÏÂÔØJavaÇý¶¯
3.1.1 Jar°ü
http://central.maven.org/maven2/org/mongodb/mongo-java-driver/
3.1.2 Maven
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.10.1</version> <type>jar</type> <scope>compile</scope> </dependency> |
3.2 »ù±¾²Ù×÷
3.2.1 »ù±¾²Ù×÷
String myUserName = "admin"; String myPassword = "admin"; MongoClient mongoClient = new MongoClient("localhost", 27017); // 1.Êý¾Ý¿âÁбí for (String s : mongoClient.getDatabaseNames()) { System.out.println("DatabaseName=" + s); } // 2.Á´½ÓstudentÊý¾Ý¿â DB db = mongoClient.getDB("student"); mongoClient.setWriteConcern(WriteConcern.JOURNALED); // 3.Óû§ÑéÖ¤ boolean auth = db.authenticate(myUserName, myPassword.toCharArray()); System.out.println("auth=" + auth); // 4.¼¯ºÏÁбí Set<String> colls = db.getCollectionNames(); for (String s : colls) { System.out.println("CollectionName=" + s); } // 5.»ñÈ¡Ãþ¸ö¼¯ºÏ¶ÔÏó DBCollection coll = db.getCollection("user"); |
3.2.2 ÐÂÔö
BasicDBObject doc = new BasicDBObject("_id", "6").append("name", new BasicDBObject("username", "limingnihao")
.append("nickname", "ÀèÃ÷ÄãºÃ")).append("password", "123456") .append("password", "123456").append("regionName", "±±¾©").append("works", "5").append("birth", new Date()); WriteResult result = coll.insert(doc); System.out.println("insert-result: " + result); |
3.2.3 ²éѯ
// 2.1²éѯ - one DBObject myDoc = coll.findOne(); System.out.println(myDoc); // 2.2 ²éѯ - ÊýÁ¿ System.out.println(coll.getCount()); // 2.3²éѯ - È«²¿ DBCursor cursor = coll.find(); while (cursor.hasNext()) { System.out.println("È«²¿--------" + cursor.next()); } // 2.4²éѯ - ¹ýÂË - µÈÓÚ BasicDBObject query = new BasicDBObject("age", 1); cursor = coll.find(query); while (cursor.hasNext()) { System.out.println("age=1--------" + cursor.next()); } // 2.5²éѯ - ¹ýÂËÌõ¼þ - ²»µÈÓÚ query = new BasicDBObject("age", new BasicDBObject("$ne", 1)); cursor = coll.find(query); while (cursor.hasNext()) { System.out.println("age!=1" + cursor.next()); } // 2.6²éѯ - ¹ýÂËÌõ¼þ - 20 < i <= 30 query = new BasicDBObject("age", new BasicDBObject("$gt", 20).append("$lte", 30)); cursor = coll.find(query); while (cursor.hasNext()) { System.out.println("20<age<=30" + cursor.next()); } |
3.2.4 ÐÞ¸Ä
DBObject search = coll.findOne(new BasicDBObject("_id", "5")); BasicDBObject object = new BasicDBObject().append("$set", new BasicDBObject
("password", "1211111")).append("$set", new BasicDBObject("birth", new Date())); WriteResult result = coll.update(search, object, true, true); System.out.println("update-result: " + result); |
3.2.5 ɾ³ý
DBObject search = coll.findOne(new BasicDBObject("_id", "6")); WriteResult result = coll.remove(search); System.out.println("remove-result: " + result); |
3.3 JavaÇý¶¯²¢·¢
Java MongoDBÇý¶¯³ÌÐòÊÇḬ̈߳²È«µÄ¡£Èç¹ûÔÚWeb·þÎñÆ÷»·¾³ÖÐʹÓã¬ÄÇôӦ¸Ã´´½¨Ò»¸öMongoClientʵÀýÈ«¾ÖʹÓá£MongoClientÄÚ²¿Î¬»¤ÁËÊý¾Ý¿âµÄÁ¬½Ó³Ø(ĬÈÏÁ¬½Ó³Ø´óСΪ10)¡£Ã¿´ÎDBÇëÇ󣨲éѯ¡¢²åÈëµÈ£©µÄJavaÏ߳̽«´ÓÁ¬½Ó³ØÖлñÈ¡Á´½Ó²¢½øÐÐÖ§³Ö£¬È»ºóÊÍ·ÅÁ¬½Ó¡£Ã¿´ÎʹÓÃÁ¬½ÓÊDz»ÏàͬµÄ¡£
ÔÚ¸´ÖÆ£¨replica£©Ä£Ê½Ï£¬Èç¹ûÉèÖÃslaveOKÑ¡ÏîΪon£¬ÄÇô¶Á²Ù×÷»á±»¾ùÔȵķֲ¼µ½¸÷¸öslaveÉÏ¡£ÕâÒâζ×ŶÔÓÚͬһ¸öỊ̈߳¬Ò»¸öд²Ù×÷ºó½ô¸ú×ŵÄÒ»¸ö¶Á²Ù×÷£¬ÓпÉÄܱ»·¢Ë͵½²»Í¬µÄ·þÎñÆ÷ÉÏ£¨Ð´²Ù×÷·¢Ë͵½masterÉÏ£¬¶Á²Ù×÷·¢Ë͵½slaveÉÏ£©£¬ÕâÑù¶Á²Ù×÷ÓпÉÄܲ»»áÁ¢¿Ì·´Ó³³öÉÏÒ»¸öд²Ù×÷µÄÊý¾Ý(ÒòΪÖ÷´ÓµÄÒì²½ÐÔ)¡£
Èç¹ûÄãÏëҪȷ±£ÔÚÒ»¸ösessionÖÐÍêÕûµÄÒ»ÖÂÐÔ£¨ÀýÈçÔÚÒ»¸öhttpÇëÇóÖУ©£¬Äã¿ÉÄÜÏ£ÍûjavaÇý¶¯ÊÇÓÃͬһ¸ösocketÁ¬½Ó£¬ÕâʱÄã¿ÉÒÔͨ¹ýʹÓÃ"consistent
request"À´´ïµ½Ä¿µÄ¡ª¡ªÔÚ²Ù×÷ǰºó·Ö±ðµ÷ÓÃrequestStart()ºÍrequestDone()¡£
DBºÍDBCollectionÍêÈ«ÊÇḬ̈߳²È«µÄ¡£ÊÂʵÉÏ£¬Äã²»¹ÜÔõôÑùµ÷Óö¼ÊÇͬһʵÀý£¬ÒòΪËûÃǽøÐÐÁË»º´æ¡£
DB db...; db.requestStart(); try { db.requestEnsureConnection(); code.... } finally { db.requestDone(); } |
ÔÚµ¥¶Àд²Ù×÷ÉϵÄWriteConcernÑ¡Ïî
ĬÈÏÇé¿öÏ£¬Ã¿´Îд²Ù×÷ºó£¬Á¬½Ó¾Í±»ÊÍ·Å»ØÁ¬½Ó³Ø¡ª¡ª´ËʱÄãµ÷ÓÃgetLastError()ÊÇûÓõġ£
ËùÒÔ¿ÉÒÔ²ÉÓÃÁ½ÖÖ·½Ê½£º
1£¬Ê¹ÓÃÀàËÆWriteConcern.SAFEÕâÑùµÄд²ßÂÔÀ´´úÌæÄ¬ÈϲßÂÔ£¬ÕâÑùjavaÇý¶¯»á×Ô¶¯Ê×Ïȵ÷ÓÃgetLastError()£¬È»ºó²Å½«Á¬½Ó·Å»ØÁ¬½Ó³Ø¡£
DBCollection coll...; coll.insert(..., WriteConcern.SAFE); |
2£¬²ÉÓÃÉÏÊöµÄrequestStart()ºÍrequestDone()·½Ê½À´Î¬³ÖÁ¬½Ó²»±»ÊÍ·Å£¬Öмäµ÷ÓÃgetLastError()»ñÈ¡´íÎóÐÅÏ¢¡£
DBCollection coll...; coll.insert(..., WriteConcern.SAFE); DB db...; DBCollection coll...; db.requestStart(); try { coll.insert(...); DBObject err = db.getLastError(); } finally { db.requestDone(); } |
µÚ4Õ MongoDBÕûºÏSpring
4.1.1 repositories
´´½¨mavenÏîÄ¿£¬ÆäÖÐrepositoriesʹÓÃspringµÄmaven¿â£º
<repositories> <repository> <id>central</id> <name>Maven Central</name> <url>http://repo1.maven.org/maven2/</url> </repository> <repository> <id>spring-release</id> <name>Spring Maven Release Repository</name> <url>http://repo.springsource.org/libs-release</url> </repository> <repository> <id>atlassian-m2-repository</id> <url>https://m2proxy.atlassian.com/repository/public</url> </repository> </repositories> |
4.1.2 Dependencies
ʹÓõ½µÄjar°ü£º
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <type>jar</type> <scope>provided</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.1</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> <type>jar</type> <scope>runtime</scope> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.10.1</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.2.1.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb-cross-store</artifactId> <version>1.2.1.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb-log4j</artifactId> <version>1.2.1.RELEASE</version> <type>jar</type> <scope>compile</scope> </dependency> </dependencies> |
4.2 Ìí¼ÓspringÅäÖÃÎļþ
springµÄÅäÖÃÎļþapplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="liming.mongodb.example" /> <mongo:mongo host="127.0.0.1" port="27017" /> <!-- mongoµÄ¹¤³§£¬Í¨¹ýËüÀ´È¡µÃmongoʵÀý,dbnameΪmongodbµÄÊý¾Ý¿âÃû£¬Ã»Óеϰ»á×Ô¶¯´´½¨ --> <mongo:db-factory dbname="student" mongo-ref="mongo" /> <!-- mongodbµÄÖ÷Òª²Ù×÷¶ÔÏó£¬ËùÓжÔmongodbµÄÔöɾ¸Ä²éµÄ²Ù×÷¶¼ÊÇͨ¹ýËüÍê³É --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> </bean> <!-- Ó³Éäת»»Æ÷£¬É¨Ãèback-packageĿ¼ÏµÄÎļþ£¬¸ù¾Ý×¢ÊÍ£¬°ÑËüÃÇ×÷ΪmongodbµÄÒ»¸öcollectionµÄÓ³Éä --> <mongo:mapping-converter base-package="climing.mongodb.example.data.model" /> <!-- mongodb beanµÄ²Ö¿âĿ¼£¬»á×Ô¶¯É¨ÃèÀ©Õ¹ÁËMongoRepository½Ó¿ÚµÄ½Ó¿Ú½øÐÐ×¢Èë --> <mongo:repositories base-package="liming.mongodb.example.data.impl" /> <context:annotation-config /> </beans> |
4.3 Ôöɾ¸Ä²é
UserlʵÏÖµÄÔöɾ¸Ä²é£º
4.3.1 UserEntity
package liming.mongodb.example.data.model; import java.util.Date; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "user") public class UserEntity { @Id private String id; private NameEntity name; private int age; private int works; private Date birth; private String password; private String regionName; private String[] special; public String getId() { return id; } public void setId(String id) { this.id = id; } public NameEntity getName() { return name; } public void setName(NameEntity name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWorks() { return works; } public void setWorks(int works) { this.works = works; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getRegionName() { return regionName; } public void setRegionName(String regionName) { this.regionName = regionName; } public String[] getSpecial() { return special; } public void setSpecial(String[] special) { this.special = special; } } |
4.3.2 NameEntity
package liming.mongodb.example.data.model; public class NameEntity { private String username; private String nickname; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } } |
4.3.3 UserDaos
package liming.mongodb.example.data; import java.util.List; import liming.mongodb.example.data.model.UserEntity; import org.springframework.transaction.annotation.Transactional; @Transactional public interface UserDao { public abstract void _test(); public abstract void createCollection(); public abstract List<UserEntity> findList(int skip, int limit); public abstract List<UserEntity> findListByAge(int age); public abstract UserEntity findOne(String id); public abstract UserEntity findOneByUsername(String username); public abstract void insert(UserEntity entity); public abstract void update(UserEntity entity); } |
4.3.4 UserDaoImpl
package liming.mongodb.example.data.impl; import java.util.List; import java.util.Set; import liming.mongodb.example.data.UserDao; import liming.mongodb.example.data.model.UserEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.domain.Sort.Order; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Repository; import com.mongodb.DB; @Repository public class UserDaoImpl implements UserDao { public static final Logger logger = LoggerFactory.getLogger(UserDaoImpl.class); @Autowired private MongoTemplate mongoTemplate; @Override public void _test() { Set<String> colls = this.mongoTemplate.getCollectionNames(); for (String coll : colls) { logger.info("CollectionName=" + coll); } DB db = this.mongoTemplate.getDb(); logger.info("db=" + db.toString()); } @Override public void createCollection() { if (!this.mongoTemplate.collectionExists(UserEntity.class)) { this.mongoTemplate.createCollection(UserEntity.class); } } @Override public List<UserEntity> findList(int skip, int limit) { Query query = new Query(); query.with(new Sort(new Order(Direction.ASC, "_id"))); query.skip(skip).limit(limit); return this.mongoTemplate.find(query, UserEntity.class); } @Override public List<UserEntity> findListByAge(int age) { Query query = new Query(); query.addCriteria(new Criteria("age").is(age)); return this.mongoTemplate.find(query, UserEntity.class); } @Override public UserEntity findOne(String id) { Query query = new Query(); query.addCriteria(new Criteria("_id").is(id)); return this.mongoTemplate.findOne(query, UserEntity.class); } @Override public UserEntity findOneByUsername(String username) { Query query = new Query(); query.addCriteria(new Criteria("name.username").is(username)); return this.mongoTemplate.findOne(query, UserEntity.class); } @Override public void insert(UserEntity entity) { this.mongoTemplate.insert(entity); } @Override public void update(UserEntity entity) { Query query = new Query(); query.addCriteria(new Criteria("_id").is(entity.getId())); Update update = new Update(); update.set("age", entity.getAge()); update.set("password", entity.getPassword()); update.set("regionName", entity.getRegionName()); update.set("special", entity.getSpecial()); update.set("works", entity.getWorks()); update.set("name", entity.getName()); this.mongoTemplate.updateFirst(query, update, UserEntity.class); } } |
4.3.5 ²âÊÔ´úÂë
package liming.mongodb.example; import java.util.Arrays; import java.util.Date; import java.util.List; import liming.mongodb.example.data.UserDao; import liming.mongodb.example.data.impl.UserDaoImpl; import liming.mongodb.example.data.model.UserEntity; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ApplicationSpring { public static void main(String[] args) { System.out.println("Bootstrapping HelloMongo"); ConfigurableApplicationContext context = null; context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = context.getBean(UserDaoImpl.class); userDao._test(); UserEntity entity1 = new UserEntity(); entity1.setId("5"); entity1.setAge(1); entity1.setBirth(new Date()); entity1.setPassword("asdfasdf"); entity1.setRegionName("±±¾©"); entity1.setWorks(1); userDao.insert(entity1); userDao.update(entity1); userDao.createCollection(); List<UserEntity> list = userDao.findList(0, 10); for (UserEntity e : list) { System.out.println("all - id=" + e.getId() + ", age=" + e.getAge() + ",
password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial())
+ ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth()); } list = userDao.findListByAge(1); for (UserEntity e : list) { System.out.println("age=1 - id=" + e.getId() + ", age=" + e.getAge() + ",
password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial())
+ ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth()); } UserEntity e = userDao.findOne("1"); System.out.println("id=1 - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ",
regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial()) + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth()); e = userDao.findOneByUsername("limingnihao"); System.out.println("username=limingnihao - id=" + e.getId() + ", age=" + e.getAge() + ",
password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial()) + ",
name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth()); System.out.println("DONE!"); } } |
|