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"
        }
})

结果如下

 此文章为个人学习汇总,可能存在一定问题,若发现问题烦请指正

Logo

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

更多推荐