MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
基本预发和使用作者不在论述,可参考 菜鸟mongo教程 ,文档上介绍的十分详细,如果不是为精通了解mongo,基本开发已经足够。
笔者使用的是老版本mac pro, 搭建工作踩坑无数,这里整理下供使用。好多博客说采用curl或者brew安装,但是笔者电脑因升级系统brew安装xcode失败,curl下载特别慢,只能采用离线安装。离线安装很简单,直接去网站mac版本下载地址下载对应安装的安装包,解压配置环境变量即可。
我下载的版本是3.6.2,解压后配置环境变量即可。
export MONGO_PATH=/Users/mantan/Applications/mongodb-osx-x86_64-3.6.2
export PATH=$PATH:$MONGO_PATH/bin
source ~/.bash_profile
完成上述配置后,环境变量配置成功,可以使用echo
检查下哈。
dbpath=/Users/mantan/Applications/mongodb-osx-x86_64-3.6.2/data/db
logpath=/Users/mantan/Applications/mongodb-osx-x86_64-3.6.2//logs/mongodb/mongod.log
logappend = true
bind_ip = 127.0.0.1
journal=true
port = 27017
# fork允许后端子进程启动,终端可以随便关
fork = true
# 安全权限,可以先以非授权模式启动Mongod,添加完用户db.addUser('root','pwd') ,再开启auth = true 后,db.auth('root','pwd'),带密码登陆
auth = true
到此,配置工作已经完成,马上起飞,是不是很激动 = - =。
使用命令启动Mongo服务
mongod --config /Users/mantan/Applications/mongodb-osx-x86_64-3.6.2/etc/mongod.conf
已经启动:
### admin管理员用户
db.createUser({ user: "root", pwd: "root", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
### 普通数据库用户
db.createUser({ user: "youruser2", pwd: "yourpassword2", roles: [{ role: "readWrite", db: "yourdatabase" }] })
下面是我测试建立的collection,特别适合做数据字段动态转储
封装了Mongo操作的Java抽象类,基本满足日常开发需求,DAO层集成此基类即可使用能力。贡献出来,供大家参考,不当之处,评论处补充:
package yonyou.esn.openapi.dao.mongo;
import org.springframework.beans.factory.annotation.Autowired;
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 yonyou.esn.openapi.util.Page;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
public class MongoBaseDao<T> {
private static final int DEFAULT_SKIP = 0;
private static final int DEFAULT_LIMIT = 200;
/**
* spring mongodb 集成操作类
*/
@Autowired
protected MongoTemplate mongoTemplate;
protected String collection;
/**
* 通过条件查询实体(集合)
*
* @param query
*/
public List find(Query query) {
return mongoTemplate.find(query, this.getEntityClass());
}
public List find(Query query, String collectionName) {
return mongoTemplate.find(query, this.getEntityClass(), collectionName);
}
/**
* 通过一定的条件查询一个实体
*
* @param query
* @return
*/
public T findOne(Query query) {
return mongoTemplate.findOne(query, this.getEntityClass());
}
public T findOne(Query query, String collectionName) {
return mongoTemplate.findOne(query, this.getEntityClass(), collectionName);
}
/**
* 通过条件查询更新数据
*
* @param query
* @param update
* @return
*/
public void update(Query query, Update update) {
mongoTemplate.findAndModify(query, update, this.getEntityClass());
}
public void update(Query query, Update update, String collectionName) {
mongoTemplate.findAndModify(query, update, this.getEntityClass(), collectionName);
}
public void removeById(String id, String collectionName){
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(id));
mongoTemplate.remove(query, collectionName);
}
/**
* 保存一个对象到mongodb
*
* @param entity
* @return
*/
public T save(T entity) {
mongoTemplate.insert(entity);
return entity;
}
public T save(T entity, String collectionName) {
mongoTemplate.insert(entity, collectionName);
return entity;
}
/**
* 通过ID获取记录
*
* @param id
* @return
*/
public T findById(String id) {
return mongoTemplate.findById(id, this.getEntityClass());
}
/**
* 通过ID获取记录,并且指定了集合名(表的意思)
*
* @param id
* @param collectionName
* 集合名
* @return
*/
public T findById(String id, String collectionName) {
return mongoTemplate.findById(id, this.getEntityClass(), collectionName);
}
/**
* 分页查询
* @param page
* @param query
* @return
*/
public Page findPage(Page page, Query query){
long count = this.count(query);
page.setTotal(count);
int pageNumber = page.getPageNumber();
int pageSize = page.getPageSize();
query.skip((pageNumber - 1) * pageSize).limit(pageSize);
List rows = this.find(query);
page.setRows(rows);
return page;
}
public Page findPage(Page page, Query query, String collectionName){
long count = this.count(query, collectionName);
page.setTotal(count);
int pageNumber = page.getPageNumber();
int pageSize = page.getPageSize();
query.skip((pageNumber - 1) * pageSize).limit(pageSize);
List rows = this.find(query, collectionName);
page.setRows(rows);
return page;
}
/**
* 求数据总和
* @param query
* @return
*/
public long count(Query query){
return mongoTemplate.count(query, this.getEntityClass());
}
public long count(Query query, String collectionName){
return mongoTemplate.count(query, this.getEntityClass(), collectionName);
}
/**
* 获取需要操作的实体类class
*
* @return
*/
private Class getEntityClass(){
Type superclass = this.getClass().getGenericSuperclass();
Type[] actualTypeArguments = ((ParameterizedType)superclass).getActualTypeArguments();
return (Class) actualTypeArguments[0];
}
}