新建一个Maven工程
添加mongodb的Java驱动依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo- java -driver</artifactId>
<version>3.5.0</version>
</dependency>
3.5版本支持:
1. 加入了对pojo的支持;
2. 增强对json的支持;
3. mongodb原生客户端支持两种document和pojo模式的开发;
还添加了单元测试和日志相关的依赖。
哦 <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 日志相关依赖 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.10</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.2</version>
</dependency>
在mongodb中的mydb数据库中,插入 users 集合,users集合中有许多的文档。代码如下:
private static final Logger logger = LoggerFactory.getLogger(JavaDocTest.class);
private MongoDatabase db;
private MongoCollection<Document> doc;
private MongoClient client;
@Before
public void init(){
client = new MongoClient("192.168.0.106",27022);
db =client.getDatabase("mydb");
doc = db.getCollection("users");
}
@Test
public void insertDemo(){
logger.info("=============开始==================");
Document doc1 = new Document();
doc1.append("name", "Mr Wang");
doc1.append("sex", "男");
doc1.append("age", 33);
doc1.append("height", 1.70f);
doc1.append("education", "教授");
doc1.append("salary", new BigDecimal("10000.56"));
Map <String, String> address 1 = new HashMap<String, String>();
address1.put("province", "taiwan");
address1.put("city", "taibei");
address1.put("street", "人民广场XXX街道");
doc1.append("address", address1);
Map<String, Object > favorites1 = new HashMap<String, Object>();
favorites1.put("movies", Arrays.asList("苍老师","波多也吉衣"));
favorites1.put("others", Arrays.asList("爬窗户","门口闲逛"));
doc1.append("favorites", favorites1);
Document doc2 = new Document();
doc2.append("name", "Mr Li");
doc2.append("sex", "男");
doc2.append("age", 30);
doc2.append("height", 1.73f);
doc1.append("education", "硕士");
doc2.append("salary", new BigDecimal("12000.45"));
Map<String, String> address2 = new HashMap<>();
address2.put("province", "beijing");
address2.put("city", "beijing");
address2.put("street", "中关村");
doc2.append("address", address2);
Map<String, Object> favorites2 = new HashMap<>();
favorites2.put("java", Arrays.asList("看代码","写代码"));
favorites2.put("book", Arrays.asList("从入门到放弃","删库跑路","颈椎病康复之路","佛学","永生"));
doc2.append("favorites", favorites2);
doc.insertMany(Arrays.asList(doc1,doc2));
logger.info("=============数据插入完毕==================");
}
这是查询数据库,数据已被插入。
查询刚才插入的数据:
@Test
public void testFind(){
final List<Document> ret = new ArrayList<>();
Block<Document> printBlock = new Block<Document>() {
@Override
public void apply(Document t) {
logger.info("document:"+t.toJson());
ret.add(t);
}
};
//select * from users where favorites.java 同时拥有 "看代码"、"写代码"
FindIterable<Document> find = doc.find(all("favorites.java", Arrays.asList("看代码","写代码")));
find.forEach(printBlock);
logger.info("count:"+String.valueOf(ret.size()));
ret.removeAll(ret);
//select * from users where username like '%Wang%' and (education= '本科' or contry = '硕士')
String regexStr = ".*Wang.*";
Bson regex = regex("name", regexStr);
Bson or = or(eq("education","本科"),eq("education","硕士"));
FindIterable<Document> find2 = doc.find(and(regex,or));
find2.forEach(printBlock);
logger.info("count:"+String.valueOf(ret.size()));
}
删除数据:
@Test
public void testDelete(){
//delete from users where name = 'Mr Wang'
DeleteResult deleteMany = doc.deleteMany(eq("name", "Mr Wang"));
logger.info("result1:"+String.valueOf(deleteMany.getDeletedCount()));
//delete from users where age >8 and age <25
DeleteResult deleteMany2 = doc.deleteMany(and(gt("age",8),lt("age",25)));
logger.info("result2:"+String.valueOf(deleteMany2.getDeletedCount()));
}
更新数据:
@Test
public void testUpdate(){
//update users set age=32 where username = 'Mr Li'
UpdateResult updateMany = doc.updateMany(eq("name", "Mr Li"),
new Document("$set",new Document("age",32)));
logger.info("result1:"+String.valueOf(updateMany.getModifiedCount()));
//更新user中的favorites.book,添加"如何防止猝死", "中年危机怎么办"两条数据,当favorites.book in('删库跑路','佛学')
UpdateResult updateMany2 = doc.updateMany(in("favorites.book", "删库跑路","佛学"),
addEachToSet("favorites.book", Arrays.asList( "如何防止猝死", "中年危机怎么办")));
logger.info("result2:"+String.valueOf(updateMany2.getModifiedCount()));
}
当然也可以使用POJO,new出插入数据的对象,将属性设置进去,在这里不继续介绍了。