Person表结构如下图所示
1. 查询全部
sql
select * from person;
mongodb
db.person.find()
2. 只显示name和age字段
sql
select name,age from person;
mongodb
db.person.find({},{name:1,age:1,_id:0})
_id默认显示,若不想显示 _id则需标注成0,其他字段默认不显示
3. 查询姓名是"Tom"的
sql
select * from person where name="Tom"
mongodb
db.person.find({name:"Tom"})
4.查询姓名是"Tom"或者是"Jack"
sql
select * from person where name in("Tom","Jack");
mongodb
db.person.find({name:{$in:["Tom","Jack"]}})
$in需要注意后面还有一个冒号后再加[]
5.查询姓名是Tom并且年龄小于25岁的
sql
select * from person where name="Tom" and age < 25;
mongodb
db.person.find({name:"Tom",age:{$lt:25}})
// ,约等于sql中的and
// $lt 小于 $lte 小于等于
// $gt 大于 $gte 大于等于
6. 查询姓名是Tom或者年龄小于25岁的
sql
select * from person where name ="Tom" or age < 25;
mongodb
db.person.find({$or:[{name:"Tom"},{age:{$lt:25}}]})
7. 查询年龄
sql
select distinct age from person
mongodb
db.person.distinct("age")
8.返回姓名不是Tom的前2条记录
sql
select * from person where name <>"Tom" limit 2
mongodb
db.person.find({name:{$ne:"Tom"}}).limit(2)
/*
limit可以和skip()搭配一起使用,返回前limit条记录,并跳过skip条记录
db.person.find({name:{$ne:"Tom"}}).limit(2).skip(1)
*/
9.返回姓名以J开头的数据
sql
select * from person where name like "J%";
mongodb
db.person.find({name:/^J/})
/*
/n/ ≈ like "%n%"
/^n/ ≈ like "n%"
*/
10.返回姓名是Tom但是sex不等于1的
sql
select * from person where name = "Tom" and sex <>"1";
mongodb
db.person.find({name:"Tom",sex:{$ne:1}})
11.返回年龄在20到25之间的(包含)
sql
select * from person where age between 20 and 25;
mongodb
db.person.find({age:{$lte:25,$gte:20}})
12.修改姓名时Kitty的年龄到21岁
sql
update person
set age = 21
where name = "Kitty";
mongodb
db.person.update({
name:"Kitty"
},{
$set:{
age:21
}
}
)
第一个{}放的是查询条件 约等于sql中的where
第二个{}放的是修改的内容 约等于sql中set
13.新增school字段
db.person.update({},{$set:{school:""}},{multi:1})
multi默认是false,只更新找到的第一条数据,若为true则更新所有符合条件的数据
14.删除school字段
db.person.update({},{$unset:{school:""}},{multi:1})
15.$slice 聚合
用于返回数组的子集,语法分为以下两种格式
{$slice:[<array>,n]}
{$slice:[<array>,position,n]}
n:任何表达式 只要解析结果为整数即可,为返回个数
n > 0:若position指定,则从该位置开发返回
n < 0:返回最后一个元素
position:任何表达式,解析结果必须为整数
positon > 0: 若大于array的元素数,则返回一个空数组
positon < 0:从末尾开始确定起始位置,若绝对值大于元素数,则起始位置为数组的起始位置
如:
db.resDto.findOne({"result":1},{identify_results:{"$slice":[1,2]}})
16.$lookup(aggregation)
在同一数据库下对未分片的collection执行左外连接,语法如下
{$lookup:{
from:<collection to join>,
localField:<field from the input document>,
foreignField:<field from the document of the "from" collection>,
as:<output array field>
}
}
-- mysql类似的伪代码
select *,<output array field>
from collection
where <output array field> in(
select * from <collection to join>
where <foreignField> = <collection.localField>)
如:给person插入dep_id字段,dep包含_id,id,name字段
db.person.aggregate({
$lookup:{
from:"dep",
localField:"dep_id",
foreignField:"id",
as:"depInfo"
}
})
结果如下
此文章为个人学习汇总,可能存在一定问题,若发现问题烦请指正