环境配置

在Java项目中使用MongoDB,需要在项目中引入mongo.jar这个包。下载地址:下载

请尽量下载较新的版本,本文用的是2.10.1。

连接MongoDB

 public synchronized static DB getDBConnection() throws UnknownHostException{
if(db == null){
MongoClient client = new MongoClient(DB_SERVER_IP, DBSERVER_PORT);
db = client.getDB(DB_NAME);
System.out.println("GET DBCONNECTION SUCCESSFUL");
}
return db;
}

其中IP和PORT分别是数据库服务端的IP和端口号。

创建集合

public static DBCollection getCollection(String colName){
col = db.getCollection(colName);
if(col == null){
col = db.createCollection(colName, null);
}
return col;
}

插入文档

插入数据有4中方式可选:1.利用DBObjcet,2.利用DBObjectBuilder, 3.先创建Map对象,再用Map对象构造DBObject,4.直接通过json对象创建。

这里我们主要介绍第一种方式——利用DBObject插入。DBObject是一个接口,继承自BSONObject,是可被存入数据库的一个键值的Map。这里我们使用它的基本实现:BasicDBObject。

public static void insert(){
DBCollection col = getCollection("myCollection1");
if(col != null){
DBObject o = new BasicDBObject();
o.put("name", "Z");
o.put("gender", "f");
o.put("age", 1);
col.insert(o);
}
}

另外,你也可以使用BasicDBObject提供的append()函数,来为对象插入键值对。

当你需要批量插入数据时,可以使用DBCollection.insert(List<DBObject> list);

查询文档

可以通过DBCollection.find()来查询集合中的文档。该函数返回一个游标DBCursor。通过对其迭代输出,就可以得到文档组。或者是通过DBCursor.toArray()直接转成DBObject的列表List<DBObject>。代码如下:

public static void search(){
DBCollection col = getCollection("myCollection1");
if(col != null){
DBCursor cursor = col.find();
while(cursor.hasNext()){
DBObject o = cursor.next();
System.out.println(o);
}
}
}
public static void search(){
DBCollection col = getCollection("myCollection1");
if(col != null){
List<DBObject> list = col.find().toArray();
}
}

当然,也可以设置查询条件,并对输出结果的字段进行限制:

public static void search2(){
DBCollection col = getCollection("myCollection1");
if(col != null){
//查询条件
DBObject query = new BasicDBObject();
query.put("gender", "m"); //输出结果是否有要输出某个字段。0表示不输出,1表示只输出该字段
DBObject field = new BasicDBObject();
field.put("name", 1); DBCursor cursor = col.find(query,field);
while(cursor.hasNext()){
System.out.println(cursor.next());
}
}
}

上述代码就表示查询性别为m的全部文档,并输出其姓名。

较复杂的条件查询:

    public static void search2(){
DBCollection col = getCollection("myCollection1");
if(col != null){
//查询条件
DBObject query = new BasicDBObject();
DBObject o = new BasicDBObject("$lt",24).append("$gt", 21);
query.put("age", o); DBCursor cursor = col.find(query);
while(cursor.hasNext()){
System.out.println(cursor.next());
}
}
}

这里我们筛选的是年龄小于24且大于21的全部文档。

更新文档

    public static void update1(){
DBCollection col = getCollection("myCollection1");
if(col != null){
//查询条件
DBObject query = new BasicDBObject();
query.put("name", "A");
//用来替换的文档
DBObject newObject = new BasicDBObject();
newObject.put("name", "A1");
col.update(query, newObject);
}
}

这里我们将name这个字段等于A的文档替换成了name字段为A1的值,注意的是,新的文档将不包含旧文档的其他字段,是真正意义上的两个文档的替换,而非替换相同字段!另外一点需要注意的是,该方法只替换第一条符合查询条件的文档。因为multi的默认值为false,可以通过设置这个值为true来修改多条。

findAndModity(DBObject query,  DBObject  fields, DBObject sort,  boolean remove, DBObject update,boolean returnNew,boolean upsert)也提供了类似的功能

query - query to match

fields - fields to be returned

sort - sort to apply before picking first document

remove - if true, document found will be removed

update - update to apply

returnNew - if true, the updated document is returned, otherwise the old document is returned (or it would be lost forever)upsert - do upsert (insert if document not present)

删除文档

删除指定的一个文档:

public static void remove1(){
DBCollection col = getCollection("myCollection1");
if(col != null){
DBObject o = col.findOne();
col.remove(o);
}
}

删除符合某条件的文档:

public static void remove2(){
DBCollection col = getCollection("myCollection1");
if(col != null){
//条件
DBObject query = new BasicDBObject();
query.put("name", "A1");
col.remove(query);
}
}

会删除符合条件的全部文档。

如需要删除集合下的全部文档时,可结合DBCursor实现。

参考:

API文档:http://api.mongodb.org/java/2.10.1/

其他资料:菜鸟教程

      http://blog.csdn.net/hx_uestc/article/details/7620938

最新文章

  1. UOJ58 【WC2013】糖果公园
  2. go语言和资料
  3. 在Win7 64位注册ActiveX控件
  4. 在Repeater中嵌套使用Repeater
  5. 【转】 IOS开发xcode报错之has been modified since the precompiled header was built
  6. eclipse中输入@符号自动提示Annotation
  7. java_web用户的自动登录模块的实现
  8. Linux学习awk命令
  9. swust oj 1011
  10. python笔记——随手记
  11. CSS设计中的错误大整理!
  12. mysql binlog日志自动清理及手动删除
  13. js 原生图片上传
  14. Intel P6以来核心架构及对应型号、芯片组一览表
  15. Java后端,应该日常翻看的中文技术网站&lt;转&gt;
  16. selenium IDE测试中的坑
  17. libxml_disable_entity_loader
  18. Ubuntu下安装JDK7(附Clojure下载)
  19. RecyclerView上拉隐藏Toolbar,下拉显示
  20. Hadoop(21)-数据清洗(ELT)简单版

热门文章

  1. Scratch 第4课满天星
  2. django_rest_framework视图传递参数给序列化器
  3. 有关google的guava工具包详细说明
  4. For循环详解
  5. AJ学IOS(30)UI之Quartz2D画图片画文字
  6. RNN循环神经网络(Recurrent Neural Network)学习
  7. FreeRTOS操作系统工程建立和操作系统的概念
  8. 全网最全C#实习面试题目
  9. python爬取《龙岭迷窟》的数据,看看质量剧情还原度到底怎么样
  10. 10个步骤教你如何安装Anaconda安装,Python数据分析入门必看