手记

NoSQL入门之MongoDB学习笔记[基本的java 和shell 应用]

不一样的神兽,不一样的身手...

下载地址:点击进入下载

好多版本,根据自己的需求下载。安装好后,进入bin目录,如下:

使用MongoDB必须打开mongod.exe

shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的。使用shell 命令,需要启动mongo.exe。

注!!!

安装完后还要进行一项至关重要的操作,如果没有此操作,可能会导致mongo服务启动时闪退。
安装完成后一定要记得在安装mongo的根目录下新建 "x:\data\db"文件夹(血的教训,整了一天了,一直以为系统出问题,差点就重装系统了( ▼-▼ ))x为你的根目录。


常用shell命令:

  • 查询本地所有数据库名称
show dbs
  • 切换至指定数据库环境(若无指定的数据库,则创建新的库)
use you
  • 查询当前库下的所有聚集集合collection(相当于table)
show collections
  • 创建聚集集合
db.createCollection('youcollection');
  • 查询聚集集合中数据条数
db.mycollection.count();
  • 插入数据
db.youcollection/youdb.insert({'name':'xxx','age':26});

注:往'youcollection'聚集集合或者youdb中插上一条数库,name为xxx',age为'26'

  • 查询数据
db.youcollection/youdb.find()

注:插入时能往db下或者colleation下插入,查询的时候通过db.指定的空间.find()进行查询

  • 查询name中包含'e'的数据
db.youcollection/youdb.find({name:/e/});
  • 查询以a开头的数据
db.youcollection/youdb.find({name:/^a/});
  • 查询age列数据,并去掉重复数据
db.youcollection/youdb.distinct('age');
  • 查询前10条数据
db.youcollection/youdb.find().limit(10);
  • 查询第1条以后的所有数据
db.youcollection/youdb.find().skip(1);
  • 查询第1条数据
db.youcollection/youdb.findOne();
  • 根据username修改age
db.youcollection/youdb.update({username:'jim'},{$set:{age:22}},false,true);

db.collection.update( criteria, objNew, upsert, multi )
criteria : update的查询条件,类似sql update查询内where后面的
objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

  • 删除name为'xxx'的数据
db.youcollection/youdb.remove({name:'xxx'});
  • 集合collection重命名
db.youcollection.renameCollection('temp');

注:将youcollection集合重命名为'temp'

  • 删除集合
db.temp.drop();
  • 删除当前数据库
db.dropDatabase();

小伙伴!小伙伴!小小小小小小伙伴!~~
睡着了没?

接着嗨~

下面就是在java开发中的MongoDB如何使用:
官网:java版本MongoDB

官网上有很详细的描述,可以去仔细研读一下。(不要说自己英语不好,我英语也是烂的一比。又不让你做翻译家,能看懂大概的意思就行,在配合下翻译软件,读这玩意儿——妥妥的
我在使用MongoDB时是用的MongoTemplate:数据库和代码之间的接口(注:MongoTemplate是线程安全的)
如何创建一个MongoTemplate实例?

  • 通过java code
@Configuration
public class AppConfig {

    public @Bean Mongo mongo() throws Exception {
        return new Mongo("localhost");
    }

    public @Bean MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongo(), "mydatabase");//还有其它的初始化方法。
    }
}
  • 通过xml
 <!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
    <mongo:db-factory dbname="xx" mongo-ref="mongo" />

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongo" />
        <constructor-arg name="databaseName" value="xx" />
    </bean>

使用的简单例子

  • 增(增加的操作有两个:save、insert)
 /**
     * save函数根据参数条件,调用了insert或update函数:有则改之,无则加之
     *
     * @param entity
     * @throws Exception
     * @author yadong.zhang
     */
    @Override
    public void save(User entity) throws Exception {
        this.mongoTemplate.save(entity);
    }

    /**
     * insert的对象如果存在则不会修改之前的值,也不会重新增加
     *
     * @param entity
     * @throws Exception
     * @author yadong.zhang
     */
    @Override
    public void insert(User entity) throws Exception {
        //save函数根据参数条件,调用了insert或update函数:有则改之,无则加之
        this.mongoTemplate.insert(entity);
    }

看图看操作:
通过insert添加时,如果存在则会报错。
通过save进行添加时,如果存在则会进行修改
我们可以看下save的源码(小贴士:查看MongoDB方法的源码只需把方法后的括号去掉就可以哦

慕慕们看到了吗?是不是很有意思?save底层其实是判断执行的insert或者update操作
还有就是,MongoDB的底层代码风格是不是很熟悉?(慕慕:这TM不就是JS吗?我:可不是喽~~!!!)(方言此处不解释)

/**
     * 删除
     *
     * @param user
     * @throws Exception
     * @author yadong.zhang
     */
    @Override
    public void delete(User user) throws Exception {
        this.mongoTemplate.remove(user);
    }
/**
     * 修改操作
     *
     * @param entity
     * @throws Exception
     * @author yadong.zhang
     */
    @Override
    public void update(User entity) throws Exception {
        Query query = new Query();
        query.addCriteria(new Criteria("telephone").is(entity.getTelephone()));
        Update update = new Update();
        update.set("telephone", entity.getTelephone());
        ...
        this.mongoTemplate.updateFirst(query, update, User.class);
    }
  • 查(单)
  /**
     * 根据手机获取单个
     *
     * @param tel
     * @return
     * @throws Exception
     * @author yadong.zhang
     */
    @Override
    public User getByTel(String tel) throws Exception {
        Query query = new Query();
        query.addCriteria(new Criteria("telephone").is(tel));
        return this.mongoTemplate.findOne(query, User.class);
    }
  • 查(多)
/**
     * 获取集合
     *
     * @return
     * @throws Exception
     * @author yadong.zhang
     */
    public List<User> getList() throws Exception {
        return  mongoTemplate.findAll(User.class);
    }

接下来就是关于MongoDB最最最重要的一部分:
...
...
那就是:今天完事了!!!

我可以对一个人无限的好,前提是值得。 ——慕冬雪

13人推荐
随时随地看视频
慕课网APP

热门评论

不错 很喜欢。和老师讲的一样

我可以对一个人无限地好。。前提是值得

慕冬雪是谁?

查看全部评论