一、数据库操作

1、创建数据库

use 数据库名;

注:如果该数据库已有,则切换到这个数据库,否则创建,创建之后还看不到这个数据库,需要往这个数据库插入一条数据。

db.数据库名.insert({"键名":"值"})

2、删除数据库

db.dropDatabase();

注:当前在哪个数据库下面就删除哪个数据库

3、查看当前处于哪个数据库

db;

4、查看所有数据库

show dbs;

二、集合操作

1、创建集合

格式

db.createCollection(name, options);

参数说明:

name:集合名
options:可选参数(格式:{})

options可以是如下参数(以下参数都是可选)

字段类型描述
capped布尔默认为false,如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
autoIndexId布尔3.2 之后不再支持该参数。如为 true,自动在 _id 字段创建索引。默认为 false。
size数值最大字节数,至少是256,当capped为true时才需要指定,一行文档的大小不能超过最大字节数。
max数值最大文档数量,当apped为true时并且指定了size属性才能指定。

注: 直接插入文档也可以创建集合,创建的是一个没有固定大小的集合。

2、删除集合

数据库:drop table 表名;

MongoDB:db.集合名.drop();

三、 文档操作

1、查询

db.集合名.find();和db.getCollection(“集合名”).find();效果相同

1)、查询所有结果

数据库:select * from 表名;

MongoDb: db.集合名.find();

2)、查询指定键

数据库 :select 字段名1,字段名2 from 表名
MongoDB:db.集合名.find({}, {"键名1": 1, "键名2": 1})  

_id默认是显示出来的,如果想让他不显示,可以在大括号里面写上_id:0:,键名1和键名2的值除了0都是查询出该键,

3)、不查询指定键

数据库 :暂时不知道
MongoDB:db.集合名.find({}, {"键名1": 0, "键名2": 0}); 

同一条语句不能同时包含查询指定键和不查询指定键。否则就会报在这里插入图片描述

4)、等于

数据库 :select * from 表名 where 字段名 =值 ;

MongoDB:db.集合名.find({"键名": "值"});

MongoDB严格区分数字与字符串,如果是数字类型的键,在做条件查询时不要带双引号

5)、不等于

数据库 :select * from 表名 where 字段名 !=值 ;

MongoDB:db.集合名.find({ "键名": { "$ne": "值" }})

6)、and 条件

数据库 :select * from 表名 where 字段名1 =值  and 字段名2=值;

MongoDB:db.集合名.find({"键名1": "值”, "键名2": "值"})

7)、or条件

数据库 :select * from 表名 where 字段名1 =值  or字段名2=值;

MongoDB:db.集合名.find({"$or": [{"键名1": "值"}, {"键名2": "值"}]})

8)、比较条件

数据库 :select * from 表名 where 字段名>值;

MongoDB:db.集合名.find({"键名": {"$gt": 值}})

$gt:> 、 $lt:< 、 $gte:>= 、 $lte:<=
注:值不要给双引号,否则将视为字符串,无法查出正确结果。

9)、in

数据库 :select * from 表名 where 字段名 in (值1,值2);

MongoDB:db.集合名.find({"键名": {"$in": ["值1", "值2"]}})

10)、not in

数据库 :select * from 表名 where 字段名 not in (值1,值2);

MongoDB:db.集合名.find({"键名": {"$nin": ["值1", "值2"]}})

11)、查询包含值的数据

数据库 :select * from 表名 where 字段名 like "%值%";

MongoDB:db.集合名.find({"字段名": /值/})

注:/就相当于%,使用模糊匹配时,值不能有双引号

12)、查询以某个值开头的数据

数据库 :select * from 表名 where 字段名 like "值%";

MongoDB:db.集合名.find({"字段名": /^值/})

13)、查询以某个值结尾的数据

数据库 :select * from 表名 where 字段名 like "%值";

MongoDB:db.集合名.find({"字段名": /值$/})

14)、count

数据库 :select count(*) from 表名

MongoDB:db.集合名.count();

15)、升序

数据库:select * from 表名order by 字段名 asc
MongoDB:db.集合名.find().sort({"read": 1})

16)、降序

数据库:select * from 表名order by 字段名 desc
MongoDB:db.集合名.find().sort({"read": -1})

17)、匹配null

数据库:select * from 表名 字段名 is null;
MongoDB:db.集合名.find({'password' : null});

18)、去重

数据库:select distinct 字段名 from 表名;
MongoDB:db.集合名.distinct('键名');

19)、查询N条数据

数据库:select * from 表名 limit N;
MongoDB:db.集合名.find().limit(N);

20)、跳过N条数据

数据库:select * from 表名 limit N;
MongoDB:db.集合名.find().skip(N);

21)、分页(查第1页,查五条数据)

数据库:select * from 表名 limit 0,5;
MongoDB:db.集合名.find().skip(0).limit(5);

2、添加文档

1)、添加单条数据

数据库:insert into 表名(字段名1,字段名2,字段名3) values(值1,值2,值3);
MongoDB:db.集合名.insert({'键名1':'值1','键名2':'值2','键名3':'值3'});

2)、添加多条数据

数据库:insert into 表名(字段名1,字段名2,字段名3) values
			(值1,值2,值3),
			(值1,值2,值3);
MongoDB:db.集合名.insert([
					{'键名1':'值1','键名2':'值2','键名3':'值3'},
					{'键名1':'值4','键名2':'值5','键名3':'值6'}
					])

3、删除

1)、删除所有数据

数据库:delete from 表名;
MongoDB:db.集合名.remove({});

2)、根据条件删除

数据库:delete from 表名 where 字段名=值;
MongoDB:db.集合名.remove({"键名":"值"});

4、修改

1)、根据id修改

数据库:update 表名 set 字段名 = 值 where id=值
MongoDB:db.集合名.save({"_id":ObjectId(值),"键名":"值"})

注:如果不加_id为前缀则为添加

2)、修改单条数据

数据库:update 表名 set 字段名 = 值 where id=值
MongoDB:db.集合名.update({"键名":"值"},{"要修改的键":"要修改的值"})

注:只会修改第一条匹配条件的记录

3)、修改多条数据

数据库:update 表名 set 字段名 = 值 where id=值
MongoDB:db.集合名.update({"键名":"值"},{$set:{"要修改的键":"要修改的值"}},{multi:true})

四、聚合管道查询

1、条件过滤

db.集合名.aggregate([
    {$match:{"键名":"值"}}
]);

注:这里只列出等于的语法,其他条件请参考最基础的条件查询语法。

2、修改查询出来的文档的结构、重命名、增加或删除其中的字段

db.集合名.aggregate(
    { $project : {
        "键名" : 1 ,
    }}
 );

注:键名后面的1是只查询该键,除了0填其他数字都是只查询该键,填0则是不查询该键,其他键都查询出来。

_id也是默认查询出来的。想要不显示则可以:

db.集合名.aggregate(
    { $project : {
        "键名" : 1 ,
        "_id" : 0
    }}
 );

3、分组

db.集合名.aggregate({
    $group: {
        _id: "$键名",
    }
});

4、排序

db.集合名.aggregate({
    $sort: {
        "键名": -1,
    }
});

注:-1是降序,1是升序。

5、查询N条数据

db.集合名.aggregate([
    {
        $limit: N
    }
]);

6、跳过N条数据

db.集合名.aggregate([
    {
        $skip: N
    }
]);

7、关联查询

db.集合名.aggregate(
    [
        {
            "$lookup": {
                "from": "被关联集合名",
                "localField": "主集合的键名",
                "foreignField": "被关联集合的键名",
                "as": "别名"
            }
        }
    ]
)

五、聚合内容查询

以下所有操作都必须加上_id,而且键名前面必须加$

1、求和

db.集合名.aggregate({
    $group: {
        _id: 任意值,
        "别名": {
            $sum: "$键名"
        }
    }
});

2、求平均值

db.集合名.aggregate({
    $group: {
        _id: 任意值,
        "别名": {
            $avg: "$键名"
        }
    }
});

3、求最小值

db.集合名.aggregate({
    $group: {
        _id: 任意值,
        "别名": {
            $min: "$键名"
        }
    }
});

4、求最大值

db.集合名.aggregate({
    $group: {
        _id: 任意值,
        "别名": {
            $max: "$键名"
        }
    }
});

5、根据排序后的结果获取第一条数据

db.集合名.aggregate([{
    $group: {
        _id: 值,
        别名: {
            $first: "$键名"
        }
    }
}]);

注:查询出来的结果一定是_id和别名,其他key不会显示出来

6、按照排序后的结果获取最后一条数据

db.集合名.aggregate([{
    $group: {
        _id: 值,
        别名: {
            $last: "$键名"
        }
    }
}]);

注:查询出来的结果一定是_id和别名,其他key不会显示出来

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐