mongodb学习笔记

975人浏览 / 0人评论

基础

  • MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • MongoDB是一个介于关系数据库和非关系数据库之间的产品它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
  • BSON是一种计算机数据交换格式,主要被用作MongoDB数据库中的数据存储和网络传输格式。 它是一种二进制表示形式。BSON之名缘于JSON,含义为Binary JSON(二进制JSON)。

特点

  • 面向集合存储,易存储对象类型的数据
  • 支持动态查询
  • 支持完全索引,包含内部对象
  • 支持复制和故障恢复
  • 支持多种开发语言
  • 使用高效的二进制数据存储,包括大型对象(如视频等)

使用场景

  • 网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。
  • 高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。

不适用的场景

  • 要求高度事务性的系统。
  • 传统的商业智能应用。
  • 复杂的跨文档(表)级联查询。

支持的数据类型

    null({"x" : null}),布尔类型({"x" : true}),数值类型({"x" : 2.32}  ,  {"x" : 2},{"x" : NumberInt(2)},{"x" : NumberLong(2)}),字符串({"x" : "123@qq.com"}),日期类型({"x" : new Date()}),数组({"x" : ["vvvv", "77777"]}),内嵌文档({"x" : {"name" : "vvv"}}),文档的_id和_Object({"_id" : ObjectId()})

常用指令

#登录
>mongo ip地址 //默认端口号27017
#退出
>exit
#查看数据库
>show dbs
#切换数据库,这个指令也可以直接创建数据库,但只有添加数据后,show dbs才能看到该数据库
>use 数据库名
#查看当前数据库,默认数据库:test
>db
#查看所有的数据集
>show collections
#删除当前数据库
>db.dropDatabase()
#创建集合(相当于创建表)
>db.createCollection("user1")
#删除集合
>db.collectionName.drop()
#集合重命名
>db.oldCollectionName.renameCollection("newName")
#新增数据
>db.collectionName.insert({"key":value,"key":value})
>db.collectionName.save({"key":value,"key":value})
#查询所有数据
>db.collectionName.find()
#条件查询
#find()以非结构化的方式展示文档
>db.collectionName.find({"age":26}) //查询等值关系
>db.collectionName.find({age : {$gt : 100}}) // 大于100
>db.collectionName.find({age : {$gte : 100}}) //大于等于100
>db.collectionName.find({age : {$lt : 150}}) //小于150
>db.collectionName.find({age : {$lte : 150}}) //小于等于150
>db.collectionName.find({age : {$lt :200, $gt : 100}}) //大于100,小于200
#如果你需要以易读的方式来读取数据,可以使用 pretty() 方法
>db.collectionName.find().pretty()
#查询一条数据
>db.collectionName.findOne();
#查询指定列
> db.collectionName.find({},{name:1,age:1,sex_orientation:true})
#查询指定字段的数据,并去重
> db.collectionName.distinct('sex')
#对结果集排序
> db.collectionName.find().sort({salary:1}) //升序
> db.collectionName.find().sort({salary:-1}) //降序
#统计记录数
> db.collectionName.find().count()
#查询限定条数
>db.collectionName.find().limit(number)
#and 关系:MongoDB 的 fifind() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件
>db.collectionName.find({key1:value1, key2:value2}).pretty()
#or关系:MongoDB OR 条件语句使用了关键字 $or
>db.collectionName.find({$or: [ {key1: value1}, {key2:value2}]}).pretty()
#清空集合数据
>db.collectionName.remove({})
#条件删除:remove({key:value})
#删除满足条件的一条数据:remove({key:value},1)
#更新数据
db.collectionName.update(<query>,<update>,{upsert: <boolean>, multi: <boolean>)
#query: update的查询条件
#update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
#upsert : 可选,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
#multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部#更新。
#示例:
> db.collectionName.update({name:'tom'},{$set:{age:23}},false,true)

索引

#索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
#创建
>db.collection.createIndex(keys, options)
#默认主键id,索引名叫“_id_”,不能被删除。 可以通过>db.collectionName.getIndexes() 查看

#单列索引
>db.collectionName.createIndex({"title":1}) (1表示正序,-1逆序)
#组合索引
>db.collectionName.createIndex({"userid":1,"username":-1})
#唯一索引
>db.collectionName.CreateIndex({"UserId":1}, { unique: true });
#TTL索引
db.log_events.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )
#删除索引
>db.collectionName.dropIndexes()
>db.collectionName.dropIndex("索引名称")
#drop()集合时,索引也会删除,remove()集合时,索引仍然存在

java调用

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.2.2</version>
</dependency>
public class Main {
    @Test
    public void fun(){
        // 1.连接到 mongodb 服务
        MongoClient mongoClient = new MongoClient("192.168.109.131", 27017);
        // 2.连接到数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
        System.out.println(mongoDatabase);
        //3.创建集合
        mongoDatabase.createCollection("student");
        // 获得集合
        MongoCollection<Document> collection = mongoDatabase.getCollection("student");
        //4.新增
        Document document = new Document("stu1name", "lisi");
        document.append("stu1age", 29);
        document.append("sex", "男");
        collection.insertOne(document);
        System.out.println("成功");
        //插入多行时,将document对象添加到List集合中,调取insertMany()
        //5.获得所有文档
        FindIterable<Document> documents = collection.find();
        MongoCursor<Document> iterator = documents.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        //6.更新文档updateOne(),updateMany(条件表达式,新值表达式)
        collection.updateMany(Filters.eq("sex","男"),new Document("$set",new Document("name","testzhangsan")));
        // 7.删除文档
        // 删除20岁用户的信息
        collection.deleteOne(Filters.eq("stu1age",20));
    }
}

 

全部评论