docker安装MongoDB
1.1 获取docker镜像
docker pull mongo
1.2 创建mongodb容器
docker run --name mongodemo -p 27017:27017 -d mongo --auth
如果加需要验证就加--auth,不需要验证,就去掉。默认mongodb是不使用用户认证
1.3 进入容器设置用户
docker exec -it 容器id /bin/bash
mongo
use admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]}) //创建用户,此用户创建成功,则后续操作都需要用户认证
exit
或者直接进入admin
docker exec -it ly-mongo mongo admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]}) //创建用户,此用户创建成功,则后续操作都需要用户认证
exit
1.4 测试
mongo 宿主机ip/admin -utest -p 如果端口不是27017,要在IP后面指定端口号
集成SpringDataMongoDB
1. 添加依赖
<!-- SpringdataMongoDB的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2. application.xml中进行配置
data:
mongodb:
uri: mongodb://your_username:your_pwd@ip地址:27017/数据库名 ### 注意,如果端口号为27017可以不写
3. 实体类中使用
@Document(collection = "studio_mongo")
public class XxxMongoEntity implements Serializable {
@Id
private ObjectId id;//可以将ObjectId改为String类型
}
4. Dao实现
@Component
public class XxxxMongoServiceImpl implements XxxMongoService {
@Autowired
MongoTemplate mongoTemplate;
public void add(XxxMongo xxxMongo) {
xxxMongo.setId(IdWorker.getIdStr());
mongoTemplate.save(xxxMongo);
}
public List<StudioMongo> findByLoc() {
return null;
}
}
遇到问题解决
问题:not authorized on test to execute command { $eval: \"return 1111\"
原因:用户权限不足
解决:给用户添加权限即可
1. 新建一个角色,比如叫 sysadmin,需要先切换到admin库进行如下操作:
> use admin
switchedtodb admin
> db.createRole({role:'sysadmin',roles:[],
privileges:[
{resource:{anyResource:true},actions:['anyAction']}
]})
2. 然后,新建一个用户,使用这个角色,注意,这个角色的db是admin,操作如下:
> use xxx
switchedtodb xxx
> db.createUser({
user:'xxxx',
pwd:'xxxxxxx',
roles:[
{role:'sysadmin',db:'admin'}
]})