Mongo 在Java中的增删改查操作

看了网上好多的代码啊,真心看着乱乱乱啊,都没心情看了,自己整理了一下,请笑纳吧得意

备注个官网上增删改查命令的网址吧,英文的http://docs.mongodb.org/manual/reference/crud/


先给大家看下我导入的包包吧

import java.net.UnknownHostException;
import org.bson.types.ObjectId;
import org.junit.Test;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;

一、首先与数据库连接获取集合的操作

//			创建Mongo对象
			Mongo mongo=new Mongo("localhost", 27017);
			
//			连接名为tom的数据库,如果不存在则创建
			DB myDB = mongo.getDB("tom");
			
//			从该数据库中获取名为mycollection  的数据集合,如果不存在则创建collection
			DBCollection collection = myDB.getCollection("myCollection");

那那,之后的所有操作都是要借助这个collection(也可以换成其他的名字的)  的哦。所以果断的封装了这段代码

/**
	 * 获取collection
	 * @throws UnknownHostException 
	 * */
	 public DBCollection getCollection() {
		 Mongo mongo;
		try {
			mongo = new Mongo("localhost", 27017);
			
//			连接名为tom的数据库,如果不存在则创建
			DB myDB = mongo.getDB("tom");
			
//			从该数据库中获取名为mycollection  的数据集合,如果不存在则创建collection
			DBCollection collection = myDB.getCollection("myCollection");
			
			return collection;
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
			
	 }

为了方便使用这个集合collection ,我直接弄了个全局变量

	 public DBCollection collection=getCollection();

开始增删改查了~~

二、增加操作

/**
	 * 插入数据操作
	 * */
	public int insertAction(long userId,String name,int age,String message){
//创建存放数据的对象(或者是容器吧)
		DBObject document= new BasicDBObject();
//这里存放的数据类型有好多,也可以是BasicDBObject类型的
		document.put("name",name);
		document.put("age", age);
		document.put("userId", userId);
//              存放的类型是List<Map>
		List<Map> list=new ArrayList<Map>();
		Map<String,Object> map=new HashMap<String,Object>();
		map.put("message", message);
		list.add(map);
		document.put("message",list);//到此要存放的对象我就鼓捣好了,你也可以继续弄的
//请看插入
// 可以不加那额getN()的,加上就是返回该操作影响到的记录行数,其他的操作也可以加上这个的,效果一样

		return collection.insert(document).getN();
//		 还可以添加多条记录,还可以是List<DBObject>类型的
//		collection.insert(document,document,document);
//              collection.insert(List<DBObject>);
		
	}



其实还有一个插入操作是save(DBObject),这个方法和insert的用法一样,但是效果不同,insert 的记录如果在数据库中存在则不作为,只有当记录不存在时才插入。而save如果发现要插入的数据已存在则更新该记录,不存在时就插入该记录。


三、查询操作

1、查询所有的记录

public void searchAll(){
		DBCursor cur=collection.find();
		while(cur.hasNext()){
			DBObject obj=cur.next();
			System.out.println("---"+obj);
			
		}
}


2、根据 _id 查询用户(额,这个 _id 貌似是每个记录都有且唯一的,由于和根据其他属性查询有点不一样,所以单个列出来了,当然,我理解的有可能不对,等我查查再补充上)。看代码

collection.findOne(new BasicDBObject("_id",new ObjectId("53e18de6d294b5581f38178d")))
findOne 是查询出一条记录,find是查询出所有符合条件的记录

3、根据用户名字查询记录

/**
* 按照name查找用户信息
* */
public BasicDBObject searchById(String name){
BasicDBObject obj=(BasicDBObject)collection.findOne(new BasicDBObject("name",name));
return obj;
}
可怜这里我强行的只要了一个记录,其实完全有可能是重名啊对不对,反正我就这么写了,你也可以把返回的类型改成DBCursor,把findOne改成find遍历 游标去吧

4、根据年龄有范围的查询~~,这个我喜欢,请注意不一样的地方安静

/**
	*查询年龄大于Myage的用户
*/
	public void searchByage(int Myage){
		DBCursor cur=collection.find(new BasicDBObject("age",new BasicDBObject("$gt",Myage)));
		while(cur.hasNext()){
			BasicDBObject tem=(BasicDBObject)cur.next();
			System.out.println(tem);
		}
	}

吐槽下:每次干个查询啊删除啊之类的总要先new个BasicDBObject ,你说烦人不,

看上面的写法吧,好好看看啊$gt 就是大于的意思。之后的按条件删除也可以这么用的

看下所有的条件吧奋斗

条件操作符
$gt : >
$lt : <
$gte: >=
$lte: <=
$ne : !=、<>
$in : in
$nin: not in
$all: all
$not: 反匹配(1.3.3及以上版本)


四、更新操作。

这个有个update函数,还有个findAndModify ,这两个都是更新,后面的是查找并更新,上面的官网里没有这个呢。

*********************************************************************************************************************************************************

db.COLLECTION_NAME.update({},{},true|false,true|false);
第一个参数是查询选择器,与findOne的参数一样,相当于sql的where子句
第二个参数是更新操作文件,由各种更新操作符和更新值构成,
第三个参数是upsert。如果是true,表示如果没有符合查询选择器的文档,mongo将会综合第一第二个参数向集合插入一个新的文档。
第四个参数是multi。true:更新匹配到的所有文档,false:更新匹配到的第一个文档,默认值
第三第四个参数也可以合并成一个:
db.COLLECTION_NAME.update({},{},{multi:true|false,upsert:true|false});
 
拥有类似事务特性的更新与查询操作——findAndModify.
非常奇怪的是,在上面的链接里面没有找到这个函数的定义。
它是原子性的,会返回符合查询条件的更新后的文档。
一次最多只更新一个文档,也就是条件query条件,且执行sort后的第一个文档。
db.COLLECTION_NAME.findAndModify({query:{},
                                                                update:{},
                                                                remove:true|false,
                                                                new:true|false,
                                                                sort:{},
                                                                fields:{},
                                                                upsert:true|false});
query是查询选择器,与findOne的查询选择器相同
update是要更新的值,不能与remove同时出现
remove表示删除符合query条件的文档,不能与update同时出现
new为true:返回个性后的文档,false:返回个性前的,默认是false
sort:排序条件,与sort函数的参数一致。
fields:投影操作,与find*的第二个参数一致。
upsert:与update的upsert参数一样。
 
不论是update的第二个参数,还是findAndModify的update,在不指定更新操作符的情况下,将会用指定的新值替换旧值。

*******************************************************************************************************************************************

以上是网上粘来的,可以看看,我写的是最简单的方法,没有用到后面的两个参数

请看代码

collection.findAndModify(new BasicDBObject("name","tom"),new BasicDBObject("age",23));

可怜上面代码的后果是把那条名字是tom的记录直接换成了一个只有一个age属性为23 的记录了,名字神马的都没有了,所以换的时候注意下后面那参数啊

/**
	 * 更新操作*/
	public void updateAction(long userId,String message){
		DBObject old = searchById(userId);//这个方法是我自己写的,根据userId查找记录

		
		List list=(List)old.get("message");
		System.out.println("****"+list);
		Map<String,Object> map=new HashMap<String,Object>();

		map.put("message", message);
		list.add(map);
		old.put("message", list);
		collection.findAndModify(new BasicDBObject("userId",userId),old);

	}

上面的样子就可以只更改message字段了 大笑,当然还可以用下面的语句

collection.update(new BasicDBObject("userId",userId),old);

我发现个问题就是这两个方法使用的时候第一个参数必须在那个括号里new 放到外面new好再放到括号里就不可以了比如下面的样子就不行

BasicDBObject obj=new BasicDBObject("userId",userId);
collection.update(obj,old);

 上面的样子就不可以更新了,我也不知道为什么。。。。 

五、删除操作~~

该操作同样有个remove 和findAndremove 估计意思和上面差不多吧,看代码

<pre name="code" class="java">/**
* 删除操作*/
	
	public void delById(){
//根据_id删除
//		System.out.print(collection.remove(new BasicDBObject("_id",new ObjectId("53e18de6d294b5581f38178d"))).getN());
//这样也可以找到,就是new不new的那个话题。乱啊
		BasicDBObject a= new BasicDBObject("name","花了");
		System.out.println(collection.findOne(a));
//根据姓名删除(getN返回影响的行数)
		System.out.print(collection.remove(new BasicDBObject("name","王五")).getN());
//		删除年龄大于20的用户信息
//		System.out.print(collection.remove(new BasicDBObject("age",new BasicDBObject("$gte",20))).getN());
	}

 

好吧,慢慢再更新吧,这个只是最基本的操作,看着不知道舒服点不 吐舌头


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MongoTemplate是Spring Data MongoDB提供的一个MongoDB操作模板,它封装了对MongoDB的常用操作方法。以下是MongoTemplate的增删语法示例: 1. 插入文档(增加数据): 使用`insert()`方法插入单个文档: ```java mongoTemplate.insert(objectToInsert, collectionName); ``` 使用`insertAll()`方法插入多个文档: ```java mongoTemplate.insertAll(listOfObjectsToInsert); ``` 2. 询文档(询数据): 使用`find()`方法询文档: ```java mongoTemplate.find(query, Object.class, collectionName); ``` 询所有文档: ```java mongoTemplate.findAll(Object.class, collectionName); ``` 3. 更新文档(修数据): 使用`updateFirst()`方法更新单个文档: ```java mongoTemplate.updateFirst(query, update, Object.class, collectionName); ``` 使用`updateMulti()`方法更新多个文档: ```java mongoTemplate.updateMulti(query, update, Object.class, collectionName); ``` 4. 删除文档(删除数据): 使用`remove()`方法删除单个文档: ```java mongoTemplate.remove(query, Object.class, collectionName); ``` 使用`removeMulti()`方法删除多个文档: ```java mongoTemplate.remove(query, Object.class, collectionName); ``` 其,`mongoTemplate`是你创建的MongoTemplate对象,`query`是询条件,`update`是更新操作的内容,`Object.class`表示要询或更新的文档类型,`collectionName`是集合名称。你可以根据自己的需求使用不同的询条件和更新操作来完成相应的操作。具体的语法和选项可以参考Spring Data MongoDB的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值