一、docker安装mongdb
1、从dockerHub官网获取镜像
docker pull mongo
2、这里的--name 放在前面并映射端口
docker run --name some-mongo -p 27017:27017 -d mongo --auth
3、进入容器
- docker exec -it 容器ID /bin/bash
4、进入容器内部,创建用户,然后退出
mongo use admindb.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]}) //创建用户,此用户创建成功,则后续操作都需要用户认证exit
复制代码
二、mongdb插入文档
1、插入文档
>db.user.insert({title: '人员信息', description: '人员描述',by: '身份证获取',url: 'http://www.fhero.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
})
复制代码
以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档
2、查看已插入文档
三、Morphia 框架的使用
1、加入依赖
<dependencies><dependency><groupId>xyz.morphia</groupId><artifactId>morphia</artifactId><version>1.4.0</version></dependency>
</dependencies>
复制代码
2、加载实体和
@Configuration
public Datastore morphiaConfig(){@Value("${host}")private String host;@Value("${port}")private String port@Value("${Database}")private String Database;final Morphia morphia = new Morphia();// tell morphia where to find your classes// can be called multiple times with different packages or classesmorphia.mapPackage("xyz.morphia.example");// create the Datastore connecting to the database running on the default port on the local hostfinal Datastore datastore = morphia.createDatastore(new MongoClient(host),port,Database);datastore.getDB().dropDatabase();datastore.ensureIndexes();return datastore;
}
复制代码
3、实体
@Entity("employees")
@Indexes(@Index(value = "salary", fields = @Field("salary")))
class Employee {@Idprivate ObjectId id;private String name;private Integer age;@Referenceprivate Employee manager;@Referenceprivate List<Employee> directReports = new ArrayList<Employee>();@Property("wage")private Double salary;public Employee() {}public Employee(final String name, final Double salary) {this.name = name;this.salary = salary;}public List<Employee> getDirectReports() {return directReports;}public void setDirectReports(final List<Employee> directReports) {this.directReports = directReports;}public ObjectId getId() {return id;}public Employee getManager() {return manager;}public void setManager(final Employee manager) {this.manager = manager;}public String getName() {return name;}public void setName(final String name) {this.name = name;}public Double getSalary() {return salary;}public void setSalary(final Double salary) {this.salary = salary;}
}
复制代码
必须加无参构造器,不然会报错
4、持久层
final Employee elmer = new Employee("Elmer Fudd", 50000.0);datastore.save(elmer);final Employee daffy = new Employee("Daffy Duck", 40000.0);datastore.save(daffy);final Employee pepe = new Employee("Pepé Le Pew", 25000.0);datastore.save(pepe);elmer.getDirectReports().add(daffy);elmer.getDirectReports().add(pepe);datastore.save(elmer);Query<Employee> query = datastore.find(Employee.class);final List<Employee> employees = query.asList();Assert.assertEquals(3, employees.size());List<Employee> underpaid = datastore.find(Employee.class).filter("salary <=", 30000).asList();Assert.assertEquals(1, underpaid.size());underpaid = datastore.find(Employee.class).field("salary").lessThanOrEq(30000).asList();Assert.assertEquals(1, underpaid.size());final Query<Employee> underPaidQuery = datastore.find(Employee.class).filter("salary <=", 30000);final UpdateOperations<Employee> updateOperations = datastore.createUpdateOperations(Employee.class).inc("salary", 10000);final UpdateResults results = datastore.update(underPaidQuery, updateOperations);Assert.assertEquals(1, results.getUpdatedCount());final Query<Employee> overPaidQuery = datastore.find(Employee.class).filter("salary >", 100000);datastore.delete(overPaidQuery);
复制代码