Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
MongoDBѧϰ±Ê¼Ç
 
×÷Õߣºlimingnihao À´Ô´£ºITeYe ·¢²¼ÓÚ 2015-11-10
  2932  次浏览      27
 

µÚ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Êý¾Ý¿â

ÃüÁîÐÐÁ´½Ó²¡´´½¨Êý¾Ý¿â

>mongo  
>use 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 ÀàÐÍ£ºÎĵµ£»ÓÃÓÚ²éѯѡÔñ¹ýÂË¡£

db.user.count({age: 1})  

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!");
}

}
   
2932 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ

²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí

GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí