MongoDB是目前比较流行的一种非关系型数据库(NoSql),他的优势很多,这里不废话。
入门
下载
建立一个存放数据库的文件夹
- 一般我会在MongoDB的安装根目录下创建一个名为db的文件夹,这个没有固定要求。
启动MongoDB
- 在Windows下打开命令行DOS窗口(win+R),首先进入MongoDB安装目录下的bin目录下,也可以在环境变量中加入MongoDB安装的目录下的bin文件夹路径,然后用mongod –dbpath来启动。
基本操作
增删查改是一个数据库最基本的操作,我们可以打开一个DOS命令窗口(启动窗口不要关闭),输入mongo就能打开MongoDB的shell命令客户端。
-
增
db.Person.insert({“name”:”张三”,”role”:”admin”}); WriteResult({ “nInserted” : 1 })
-
查
条件查询:
db.Person.find({“name”:”张三”}); { “_id” : ObjectId(“5617275737a5aa2cafdb4b84”), “name” : “张三”, “role” : “admin” }
全部查询:
db.Person.find(); { “_id” : ObjectId(“5617275737a5aa2cafdb4b84”), “name” : “张三”, “role” : “admin” }
注意:id字段是默认加入的GUID,保证了数据的唯一性。就像关系型数据库中的主键,在MongoDB中就省去了定义主键这一步了。
-
改
update命令有两个参数,一个是“查找条件”,另一个是“更新的值”,其大概可以看成是一个Map的Key和Value。
db.Person.update({“name”:”张三”},{“name”:”张三”,”age”:40}); WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 })
db.Person.find(); { “_id” : ObjectId(“5617275737a5aa2cafdb4b84”), “name” : “张三”, “role” : “admin”,”age”:40}
-
删
db.Person.delete({“name”:”张三”}); WriteResult({ “nRemoved” : 1 })
db.Person.find();
就没有数据了。
将MongoDB安装到window服务里
- 创建一个存放数据库日志的文件夹,比如“D:\Program Files\MongoDB\Server\3.0\log”。
-
在根目录下创建一个名为“mongod.cfg”配置文件,如下: systemLog: destination: file path: D:\Program Files\MongoDB\Server\3.0\log\mongod.log storage: dbPath: D:\Program Files\MongoDB\Server\3.0\db
具体的配置参数,请参照官方文档
注意:配置文件内容不能用“缩进符号”来对齐,在目前我使用的版本3.0.6会无法启动。
-
以管理员权限打开一个“命令指示符”窗口,使用如下命令: D:\Program Files\MongoDB\Server\3.0\bin>mongod –config “D:\Program Files\MongoD
B\Server\3.0\mongod.cfg” –install
D:\Program Files\MongoDB\Server\3.0\bin>
- 在DOS命令窗口输入:net start MongoDB 即可。
在Mybatis中使用MongoDB操作
MyBatis增操作
注意: 在Mybatis增加操作时,要先将数据存放在对应的class中,再将这个class存放在MongoDB中,这样才能在以后的操作中使用对应的操作语句。
public void addData() {
DBCollection coll = MongoUtil.getColl("pandapanzhu");
BasicDBObject doc = new BasicDBObject();
doc.put("name", "MongoDB");
doc.put("type", "database");
doc.put("count", 1);
coll.insert(doc);
//插入时,需要将数据加到doc中才能在MongoDB中找到对应的class
// 设定write concern,以便操作失败时得到提示
coll.setWriteConcern(WriteConcern.SAFE);
}
Mybatis查操作
private MongoOperations mongo;
DBObject query =new BasicDBObject();
query.put("createdTime",new BasicDBObject(QueryOperators.GTE, beginTime).append(QueryOperators.LTE, endTime));
//其中GTE代表>=,LET代表<=
query.put("url",url);
//查询是可以拼接的,相当于MySQL中的AND
//模糊查询,模糊查询是根据java正则表达式来匹配的
Pattern pattern=Pattern.compile(url);//url从后台传过来的
query.put("url",url);
long count=mongo.getCollection(COLLECTION).count(query);
//得到上述query查询到的数据的数量
DBCursor cursor = mongo.getCollection("pandapanzhu").sort(new BasicDBObject("Id", -1)).find(query).skip(page.getStartItem()).limit(page.getPageSize());
//分页,并根据id顺序显示
如果只想查询数据表中一部分数据,可以定义一个buildFields函数,将需要查询的数据写出来,相当于MySQL中的SELECT id,name,,role from ***; public static DBObject buildFields(String… fieldNames) { DBObject fields = new BasicDBObject(); for (String fn : fieldNames) { fields.put(fn, 1); } return fields; }
//调用上述函数
DBObject fields =buildFields("id", "name", "role");
DBCursor cursor = mongo.getCollection(COLLECTION).find(query, fields).sort(new BasicDBObject("id", -1)).skip(page.getStartItem()).limit(page.getPageSize());
最后将查询到数据放到List中
List<RepeatArticle> result = new LinkedList<RepeatArticle>();
while (cursor.hasNext()) {
DBObject o = cursor.next();
result.add(toEntity(o, RepeatArticle.class));
}
return result;
Mybatis删操作
public void delete() {
BasicDBObject query = new BasicDBObject();
query.put("name", "xxx");
// 找到并且删除,并返回删除的对象
DBObject removeObj = mongo.getCollection("wujintao").findAndRemove(query);
System.out.println(removeObj);
}
Mybatis改操作
public void update() {
BasicDBObject query = new BasicDBObject();
query.put("name", "liu");
DBObject stuFound = mongo.getCollection("wujintao").findOne(query);
stuFound.put("name", stuFound.get("name") + "update_1");
//stuFound.get("name") + "update_1" 为修改后的name
mongo.getCollection("wujintao").update(query, stuFound);
}
至此,以后有深入了解在回来补充! 参考文献