前言、创建数据库
解释:
MongoDB 在创建数据库的时候和传统的关系型数据库有些不一样,这货通过use dbname,就相当于创建了一个数据库,但是还需要插入数据后这个数据库才会真实存在.
对于Mongo的增删该查刚开始学习,比较纠结查询的时候到底条件如何加,又是[],又是{},又是(),到底如何处理,我这里给大家分享个口诀:

  • 方法外层(),抱着参数没法逃
  • 单一内容{},单一结构简明了
  • 多个内容[], 包在{}外,隔掉
  • 查询时刻$来到,范围使用广又好
  • find方法耍大刀,批量拿出数绝招
  • 查询And快又好,仅在{}里条件加,号
  • 一次想查复杂数,条件内容用{},前面用上修饰符,后面{}来包绕,如果值在范围内,修饰后面用[],值儿只需用,
  • 正则匹配威力大,前后包抄用//, 开头结尾老调调 ^ $
  • 匹配null坑不少,最好and上$exists为true来围剿
  • mongo查询有深度,数组、范围有蹊跷,查个范围数组来胡闹,加上$elemMatch修饰全办到.
  • update四参数,一是条件,二内容,三用0来不插入,四用true来多更新
  • 加减操作用$inc, 想加想减 +-造
  • 局部更新用$set, 免得内容全干掉
  • 以上口诀美和妙,学会困扰全撂倒

一、Mongo增加操作

1.1 单条插入
var obj = {
... "name":"brave",
... "sex":1,
... "age":30
};
> db.user.insert(ojb);

1.2 批量插入
db.user.insert(
[
  { 'name' : "qianqi", 'sex'  : 0, 'age'  : 10},
  { 'name' : "zhaoliu", "sex"  : 0, "age"  : 22}
]
);
1.3 插入一个数组
db.user.insert({ "name":"masan", "age" : 40, "sex" : 1, "like":["music","books","news"] });
db.user.insert({ "name":"zhousi", "age" : 28, "sex" : 0, "like":["song","listen","news"] });

二、Mongo删除操作
2.1 有条件性删除

#desc 删除_id 为 object("**") 的数据
db.user.remove({ "_id" : ObjectId("573c0abae55e93cece734382")});

2.2 删除集合 这样整个集合都没了.

db.user.drop();

三、查询操作无非就有下面这种针对性和组合性的操作
①: >, >=, <, <=, !=, =。
②:And,OR,In,NotIn
在MongoDB 中对应的符合为
$gt ,$gte ,$lt,$lte, $ne,$eq,,$or,$in,$nin
3.1 单条件查询,只举一个例子

#desc 查询年龄为 >=30的用户
db.user.find( {"age":{"$gte":30}})
结果:
{ "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 30 }
{ "_id" : ObjectId("573c0f99e55e93cece734383"), "name" : "lisi", "sex" : "1", "age" : 30 }

3.2 组合条件查询

#desc 查询年龄=30 && 性别=1
db.user.find({"age":30,"sex":1});
结果:
{ "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 30 }

3.3 范围性查询 "$or", "$in","$nin"

db.user.find({ "age":{"$in":[22,30]}})
结果:
{ "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 30 }
{ "_id" : ObjectId("573c0f99e55e93cece734383"), "name" : "lisi", "sex" : "1", "age" : 30 }
{ "_id" : ObjectId("573c1a72e55e93cece734386"), "name" : "zhaoliu", "sex" : 0, "age" : 22 }

3.4 正则匹配

    #desc 查询姓名 以b开头 以e结尾
    > db.user.find({ "name" : /^b/,"name" : /e$/ })
    结果
    { "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 30 }
3.5 计算取余查询:
    #查询年龄取余5余数=2这个给定值的数据集
    db.user.find({"age":{"$mod",[5,2]}})
    { "_id" : ObjectId("573c1a72e55e93cece734386"), "name" : "zhaoliu", "sex" : 0, "age" : 22 }
    #如果要求返回年龄为取余5 余数不等2的数据集结果
    db.user.find({"age":{"$not":{"$mod":[5,2]}}});
    { "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 31 }
    { "_id" : ObjectId("573c0f99e55e93cece734383"), "name" : "lisi", "sex" : "1", "age" : 31 }
3.6 特殊字值null的查询
    查询null除了匹配值为null的,还会匹配不包含查询字段的行
    > db.user.find({"aa" : {"$eq":null}});
    { "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 31 }
    { "_id" : ObjectId("573c0f99e55e93cece734383"), "name" : "lisi", "sex" : "1", "age" : 31 }
    { "_id" : ObjectId("573c1a72e55e93cece734386"), "name" : "zhaoliu", "sex" : 0, "age" : 22 }
    db.user.find({ "aa" : {"$eq":null, $exists:true }});
    3.7 数组查询:
    #desc 查询数组元素中包含news的数据
    > db.user.find({"like":"news"})
    { "_id" : ObjectId("573c4d4ce55e93cece734387"), "name" : "masan", "age" : 40, "sex" : 1, "like" : [ "music", "books", "news" ] }
    { "_id" : ObjectId("573c4dd3e55e93cece734388"), "name" : "zhousi", "age" : 28, "sex" : 0, "like" : [ "song", "listen", "news" ] }
    #desc 查询数组元素中既有news 又有 song的数据
    > db.user.find({"like":{"$all":["news","song"]}})
    { "_id" : ObjectId("573c4dd3e55e93cece734388"), "name" : "zhousi", "age" : 28, "sex" : 0, "like" : [ "song", "listen", "news" ] }

4.修改
对Update 命令进行介绍下
Update有4个参数:第一个selector,第二个newValue,第三个upserts,第四个multipleUpdate
第三个参数如果为true,如果无查询的接口,则会把查询条件和更新数据组合成一条新数据插入
第四个参数默认为false,也就是只更新第一条,如果需要批量更新则设置为true

4.1 整个数据对象更新

#desc 先查询出年龄为20的人,把其中一个字段姓名给改为zhaoliu_ok,然后整体保存回去.
var where=db.user.findOne({"age":22});
where.name="zhaoliu_ok";
zhaoliu_ok
> db.user.update({"name":"zhaoliu"},where);

4.2 $inc 改器前者加减操作

#desc 对年龄阶段进行加/减2岁操作
db.user.update({"age":22},{"$inc":{"age":2}});
db.user.update({"name":"zhaoliu_ok"},{"$inc":{"age":-2}});

4.3 $set 局部修改

#desc 把姓名修改为zhaoliu age修改为22
> db.user.update({"name":"zhaoliu_ok"},{"$set":{"name":"zhaoliu","age":22}});

4.4 upsert操作,这个方法和update很相似,把update 第三个参数设置为true就一样了.
这个可是mongodb创造出来的“词”,这个upsert操作就是说:没有查到,我就在数据库里面新增一条,其实这样也有好处,就是避免了我在数据库里面判断是update还是add操作,使用起来很简单将update的第三个参数设为true即可和这个方法一样.

db.user.upsert({"age":30},{"$inc":{"age":1}});

4.5 如果进行批量修改

#desc 对年龄为30的用户进行年龄加1
db.user.update({"age":30},{"$inc":{"age":1}}, false,true);