一、数据库操作
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不会显示出来