mongo小记

进mongo

mongo

先添加admin表的账号密码

1. use admin
2.
db.createUser(
  {
    user: "admin",
    pwd: "admin",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
3. db.auth(‘admin‘,‘admin‘)
在admin登录情况下,切换到自己数据库操作

1. use test
2. db.createUser({user:‘test‘,pwd:‘test‘,roles:[{role:"dbOwner",db:"test"}]})
退出重新登录

1. mongo
2. use test
3. db.auth(‘test‘,‘test‘)
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

import org.bson.Document;
import org.bson.types.ObjectId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * mongodb数据库操作
 *
 * @author Duan Yong
 * @since 2016/11/11.
 */
@Repository
@SuppressWarnings("unchecked")
public class MongoDAO implements InitializingBean {

    private static Logger LOGGER = LoggerFactory.getLogger(MongoDAO.class);
    private static MongoDatabase db;

    /**
     * 根据名字获取数据库表
     */
    public MongoCollection getCollection(String name) {
        return db.getCollection(name);
    }

    /**
     * 返回文档list
     */
    public List<Document> find(String collectionName, Document query, Document key, Document order, int skip,
            int limit) {
        MongoCollection collection = db.getCollection(collectionName);
        List<Document> result = new ArrayList<>();
        if (query == null) {
            return result;
        }
        FindIterable<Document> iterable = collection.find(query);
        if (order != null) {
            iterable = iterable.sort(order);
        }
        if (skip > 0) {
            iterable = iterable.skip(skip);
        }
        if (limit > 0) {
            iterable = iterable.limit(limit);
        }
        if (key != null) {
            iterable = iterable.projection(key);
        }
        iterable.into(result);
        return result;
    }

    /**
     * 根据_id删除记录
     */
    public void deleteById(String collectionName, String id) {
        MongoCollection<Document> collection = db.getCollection(collectionName);
        collection.deleteOne(new Document("_id", new ObjectId(id)));
    }

    /**
     * 根据查询条件删除记录
     */
    public void delete(String collectionName, Document query) {
        MongoCollection<Document> collection = db.getCollection(collectionName);
        collection.deleteMany(query);
    }

    /**
     * 根据查询条件返回第一条
     *
     * @param collectionName,数据库名
     * @param query,数据库表中记录id
     */
    public Document findOne(String collectionName, Document query) {
        MongoCollection<Document> collection = db.getCollection(collectionName);
        return collection.find(query).first();
    }

    /**
     * 插入一条记录到数据库
     */
    public void insert(String collectionName, Document document) {
        MongoCollection collection = db.getCollection(collectionName);
        collection.insertOne(document);
    }

    /**
     * 更新记录
     */
    public void updateById(String collectionName, ObjectId id, Document document) {
        MongoCollection collection = db.getCollection(collectionName);
        collection.updateOne(new Document("_id",id), new Document("$set", document));
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        MongoClientOptions mongoClientOptions = new MongoClientOptions.Builder()
                .connectionsPerHost(PropertiesUtil.getInt("mongoDB.option.activeConnectionCount", 10))
                .connectTimeout(PropertiesUtil.getInt("mongoDB.option.connectTimeout"))
                .socketTimeout(PropertiesUtil.getInt("mongoDB.option.socketTimeout"))
                .maxWaitTime(PropertiesUtil.getInt("mongoDB.option.maxWaitTime"))
                .threadsAllowedToBlockForConnectionMultiplier(
                        PropertiesUtil.getInt("mongoDB.option.threadsAllowedToBlockForConnectionMultiplier"))
                .build();
        String address = PropertiesUtil.get("mongoDB.address");
        String database = PropertiesUtil.get("mongoDB.database");
        String user = PropertiesUtil.get("mongoDB.user");
        String pwd = PropertiesUtil.get("mongoDB.pwd");
        try {
            List<ServerAddress> serverAddresses = new ArrayList<>();
            for (String add : address.split(" ")) {
                serverAddresses.add(new ServerAddress(add));
            }
            MongoCredential credential = MongoCredential.createCredential(user, database, pwd.toCharArray());
            MongoClient mongoClient = new MongoClient(serverAddresses, Arrays.asList(credential), mongoClientOptions);
            db = mongoClient.getDatabase(database);
            LOGGER.info("init mongoDao : " + address);
        } catch (Exception e) {
            LOGGER.error("init mongoDao error", e);
        }
    }
}

PS:propertisUtil自己写一个吧

时间: 2024-10-05 18:54:38

mongo小记的相关文章

MongoDB小记

mongodb的一个简单使用. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 package com.chuntent.mongo; import java.util.Map;

Docker学习笔记——Mongo Dockerfile及容器运行

1.创建项目目录mongo,在目录下上传下载的Mongodb安装文件及mongo.conf配置文件,创建Dockerfile文件,项目结构如下: mongo - Dockerfile - mongo.conf - mongodb-linux-x86_64-3.4.9.tgz - data - logs Dockerfile内容如下: # mongo # SOURCE_IMAGE FROM centos # MAINTAINER_INFO MAINTAINER bluemooder [email 

SpringBoot - 二零一七0421小记

一.SpringBoot使用起来比起SpringMVC更便捷,在注解上的小变化,我记录了下面几个: @Controller + @ResponseBody = SpringMVC中用@RestController来代替前面两个注解,通过这个注解,可以将所有的前端http请求放入SpringBoot的Controller容器中,并返回json格式的数据给前端 @RequestMapping(value={"/hello","/hi"},method=RequestMe

搭建高可用mongo集群

简介: MongoDB是一个可扩展.高性能的分布式文档存储数据库,由C 语言编写,旨在为web应用提供可扩展的高性能数据存储解决方案.它的特点是高性能.易部署.易使用,存储数据非常方便.MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据 结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面 向对象的查询语言,几乎可以实现类似关系数据库单

zabbix自动发现监控mongo

1: zabbix自动发现mongo监控的端口,并返回zabbix_server需要的格式,脚本部署在zabbix_agent上,路径为/usr/local/zabbix/zabbix_discover_mongo.sh,脚本内容如下: #!/bin/sh #zhuangweihong 20160419 zabbix discover mysql res=`sudo ss -tulnp|grep mongo|grep -v 28107|awk '{print $(NF-2)}'|awk -F':

广州postgresql用户会技术交流会小记 2015-9-19

广州postgresql用户会技术交流会小记  2015-9-19 今天去了广州postgresql用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用postgresql -X2的情况 第二个讲师介绍了postgresql里面的一些执行计划分析 我个人比较关注第一个session,因为涉及到真正的应用案例 网上有对postgresql -X2的简短介绍,我先转载过来 转载:http://francs3.blog.163.com/blog/static/405767272

git 学习小记之记住https方式推送密码

昨天刚刚学了点git基础操作,但是不幸的是[email protected]给出公告说尽量使用 https 进行操作.可是在用 https 进行 push 时,都需要输入帐号和密码. 各种百度谷歌之后在[email protected]官网找到了解决方法<https方式使用[email protected]设置密码的方式>文中给出了几个方法,并且都非常简单. 关于 cache 缓存方式,我不太喜欢,因为要设置时间,而且会过期.而 store 相应的非常方便,设置全局后,方便多个库使用.当然如果

关于自动化部署之docker容器的折腾小记

docker的英文本意是码头工人,也就是搬运工,这种搬运工搬运的是集装箱(Container),集装箱里面装的可不是商品货物,而是任意类型的App,Docker把App(叫Payload)装在Container内,通过Linux Container技术的包装将App变成一种标准化的.可移植的.自管理的组件,这种组件可以在你的latop上开发.调试.运行,最终非常方便和一致地运行在production环境下. 具体什么是docker,你们自己找资料吧,应该好理解.   可以说是个运维的利器,可以把

node-mongo-native1.3.19连接mongo的最优方法

最近需要在node下连接mongo,尝试了很多方法,本文简要总结一下 选择Driver 首先,基本上有4个常见的driver供选择 1.官方的是node-mongo-native 2.基于node-mongo-native,封装的mongoose,是一个ODM小框架 3.kiss小组同样基于node-mongo-native封装的mongoskin 4.mongojs mongoose要求使用Document Schema,我们目前没有这个需求,所以不想用:mongoskin网上评价还可以,但是