广州便签纸价格交流组

MongoDB shell

麦田里的守望者2022-08-19 12:26:42



公告:精彩内容正在继续,敬请关注~~

述MongoDB Shell


   前面章节介绍了MongoDB以及NoSQL的概念,本章节重点介绍MongoDB的常见Shell操作。


MongoDB CRUD


  建表


> db.createCollection("t_user");

> db.t_user.insert({id:1,name:"jiangzz"})

WriteResult({ "nInserted" : 1 })

在MongoDB当中建表可采用这种显示建表,还有一种称为隐式建表,因为mongoDB是没有表结构的所以再插入的数据的时候是不需要建立表。


 查询(后续章节详细介绍)


> db.t_user.find({})

{ "_id" : ObjectId("5844e11351ad917fcc810655"), "id" : 1, "name" : "jiangzz" }

注意MongoDB的文档默认有系统维护该记录_id 该field是唯一的索引列不需要维护


  更新记录($set/$unset/$inc)


> db.t_user.update({id:1},{$set:{name:'小编'}});

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.find({})

{ "_id" : ObjectId("5844e11351ad917fcc810655"), "id" : 1, "name" : "小编" }

> db.t_user.update({id:1},{$set:{age:18}});

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.find({id:1}).pretty();

{

        "_id" : ObjectId("5844e3be51ad917fcc810658"),

        "id" : 1,

        "name" : "lisi",

        "age" : 18,

        "sex" : true

}

> db.t_user.update({id:1},{$unset:{age:true}});

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.find({id:1}).pretty();

{

        "_id" : ObjectId("5844e3be51ad917fcc810658"),

        "id" : 1,

        "name" : "lisi",

        "sex" : true

}

> db.t_user.update({id:1},{$inc:{age:18}});

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.update({id:1},{$inc:{age:18}});

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.find({id:1}).pretty();

{

        "_id" : ObjectId("5844e3be51ad917fcc810658"),

        "id" : 1,

        "name" : "lisi",

        "sex" : true,

        "age" : 36

}

 

默认情况下MongoDB的更新只会更新一条,一般可以再更新的指令后添加multi、upset属性控制mongodb的更新行为。

> db.t_user.find({}).pretty();

{

        "_id" : ObjectId("5844e3be51ad917fcc810658"),

        "id" : 1,

        "name" : "lisi",

        "age" : 18,

        "sex" : true

}

{

        "_id" : ObjectId("5844e3cb51ad917fcc810659"),

        "id" : 2,

        "name" : "zs",

        "age" : 25,

        "sex" : true

}

>

> db.t_user.update({sex:true},{$inc:{age:1}},{multi:true,upsert:false});

WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

 

上面的multi:true表示一次更新多条,upsert:false表示如果查询数据不存在就不添加新数据


 删除记录


> db.t_user.remove({sex:true})

WriteResult({ "nRemoved" : 2 })

表示删除所有记录中sex:true的文档

MongoDB 查询


 初始化数据

  等值查询


> db.t_user.find({name:'张三'}).pretty();

{

        "_id" : ObjectId("5844e8bc51ad917fcc81065c"),

        "name" : "张三",

        "age" : 18,

        "sex" : true,

        "salary" : 8000

}

> db.t_user.find({name:{$eq:'张三'}}).pretty();

{

        "_id" : ObjectId("5844e8bc51ad917fcc81065c"),

        "name" : "张三",

        "age" : 18,

        "sex" : true,

        "salary" : 8000

}



  等值查询(AND)


> db.t_user.find({name:'李四',sex:true}).pretty();

{

        "_id" : ObjectId("5844e8be51ad917fcc81065d"),

        "name" : "李四",

        "age" : 20,

        "sex" : true,

        "salary" : 7000

}



 等值查询(OR)


> db.t_user.find({$or:[{name:'李四'},{salary:8000}]}).pretty();

{

        "_id" : ObjectId("5844e8bc51ad917fcc81065c"),

        "name" : "张三",

        "age" : 18,

        "sex" : true,

        "salary" : 8000

}

{

        "_id" : ObjectId("5844e8be51ad917fcc81065d"),

        "name" : "李四",

        "age" : 20,

        "sex" : true,

        "salary" : 7000

}



 等值查询(NOR)


> db.t_user.find({$nor:[{name:'李四'},{salary:8000}]}).pretty();

{

        "_id" : ObjectId("5844e8db51ad917fcc81065e"),

        "name" : "王五",

        "age" : 25,

        "sex" : true,

        "salary" : 12000

}

{

        "_id" : ObjectId("5844e91251ad917fcc81065f"),

        "name" : "赵六",

        "age" : 30,

        "sex" : true,

        "salary" : 15000,

        "role" : "经理"

}



 等值查询(IN)


> db.t_user.find({name:{$in:['张三','李四']}}).pretty();

{

        "_id" : ObjectId("5844e8bc51ad917fcc81065c"),

        "name" : "张三",

        "age" : 18,

        "sex" : true,

        "salary" : 8000

}

{

        "_id" : ObjectId("5844e8be51ad917fcc81065d"),

        "name" : "李四",

        "age" : 20,

        "sex" : true,

        "salary" : 7000

}



 等值查询(NIN)


> db.t_user.find({name:{$nin:['张三','李四']}}).pretty();

{

        "_id" : ObjectId("5844e8db51ad917fcc81065e"),

        "name" : "王五",

        "age" : 25,

        "sex" : true,

        "salary" : 12000

}

{

        "_id" : ObjectId("5844e91251ad917fcc81065f"),

        "name" : "赵六",

        "age" : 30,

        "sex" : true,

        "salary" : 15000,

        "role" : "经理"

}



   取反操作(NOT)


>db.t_user.find({name:{$not:{$eq:'张三'}}}).pretty();

{

        "_id" : ObjectId("5844e8be51ad917fcc81065d"),

        "name" : "李四",

        "age" : 20,

        "sex" : true,

        "salary" : 7000

}

{

        "_id" : ObjectId("5844e8db51ad917fcc81065e"),

        "name" : "王五",

        "age" : 25,

        "sex" : true,

        "salary" : 12000

}

{

        "_id" : ObjectId("5844e91251ad917fcc81065f"),

        "name" : "赵六",

        "age" : 30,

        "sex" : true,

        "salary" : 15000,

        "role" : "经理"

}



 不等于操作(NE)


> db.t_user.find({name:{$not:{$ne:'张三'}}}).pretty();

{

        "_id" : ObjectId("5844e8bc51ad917fcc81065c"),

        "name" : "张三",

        "age" : 18,

        "sex" : true,

        "salary" : 8000

}



 范围查询(lt、lte、gt、gte)


> db.t_user.find({salary:{$gt:7000,$lte:10000}}).pretty();

{

        "_id" : ObjectId("5844e8bc51ad917fcc81065c"),

        "name" : "张三",

        "age" : 18,

        "sex" : true,

        "salary" : 8000

}



 判断key是否存在


> db.t_user.find({role:{$exists:true}}).pretty();

{

        "_id" : ObjectId("5844e91251ad917fcc81065f"),

        "name" : "赵六",

        "age" : 30,

        "sex" : true,

        "salary" : 15000,

        "role" : "经理"

}



 正则搜索(REGEX)


> db.t_user.find({name:{$regex:'^张$'}}).pretty();

> db.t_user.find({name:{$regex:'^张'}}).pretty();

{

        "_id" : ObjectId("5844e8bc51ad917fcc81065c"),

        "name" : "张三",

        "age" : 18,

        "sex" : true,

        "salary" : 8000

}


MongoDB 分页


Mongodb的分页查询使用的limit和skip函数实现对数据的分页查询。


> db.t_user.find({}).skip(1).limit(2).pretty();

{

        "_id" : ObjectId("5844e8be51ad917fcc81065d"),

        "name" : "李四",

        "age" : 20,

        "sex" : true,

        "salary" : 7000

}

{

        "_id" : ObjectId("5844e8db51ad917fcc81065e"),

        "name" : "王五",

        "age" : 25,

        "sex" : true,

        "salary" : 12000

}

 
MongoDB 投影查询


MongoDB在查询的时候可以指定数据库返回的域的值。


> db.t_user.find({},{_id:false,name:true,salary:true})

{ "name" : "张三", "salary" : 8000 }

{ "name" : "李四", "salary" : 7000 }

{ "name" : "王五", "salary" : 12000 }

{ "name" : "赵六", "salary" : 15000 }

 
MongoDB 排序

> db.t_user.find({},{_id:false,name:true,salary:true}).sort({salary:1})

{ "name" : "李四", "salary" : 7000 }

{ "name" : "张三", "salary" : 8000 }

{ "name" : "王五", "salary" : 12000 }

{ "name" : "赵六", "salary" : 15000 }

> db.t_user.find({},{_id:false,name:true,salary:true}).sort({salary:-1})

{ "name" : "赵六", "salary" : 15000 }

{ "name" : "王五", "salary" : 12000 }

{ "name" : "张三", "salary" : 8000 }

{ "name" : "李四", "salary" : 7000 }

 
MongoDB 数组(push,each,addToSet,pull,pop)


 添加元素 push


> db.t_user.find({id:1}).pretty();

{ "_id" : ObjectId("5844f83e51ad917fcc810660"), "id" : 1, "name" : "张三" }

> db.t_user.update({id:1},{$push:{address:'北京海淀'}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.update({id:1},{$push:{address:'北京朝阳'}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.find({id:1}).pretty();

{

        "_id" : ObjectId("5844f83e51ad917fcc810660"),

        "id" : 1,

        "name" : "张三",

        "address" : [

                "北京海淀",

                "北京朝阳"

        ]

}

 


 批量添加 each


> db.t_user.find({id:1}).pretty();

{ "_id" : ObjectId("5844f83e51ad917fcc810660"), "id" : 1, "name" : "张三" }

> db.t_user.update({id:1},{$push:{address:{$each:['北京朝阳','北京海淀']}}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.find({id:1}).pretty();

{

        "_id" : ObjectId("5844f83e51ad917fcc810660"),

        "id" : 1,

        "name" : "张三",

        "address" : [

                "北京朝阳",

                "北京海淀"

        ]

}

 


去重复添加元素addToSet


> db.t_user.find({id:1}).pretty();

{ "_id" : ObjectId("5844f83e51ad917fcc810660"), "id" : 1, "name" : "张三" }

> db.t_user.update({id:1},{$addToSet:{address:{$each:['北京朝阳','北京海淀','北京朝阳']}}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.find({id:1}).pretty();

{

        "_id" : ObjectId("5844f83e51ad917fcc810660"),

        "id" : 1,

        "name" : "张三",

        "address" : [

                "北京朝阳",

                "北京海淀"

        ]

}

 


查询固定大小的数组的document


> db.t_user.find({address:{$size:2}}).pretty();

       "_id" : ObjectId("5844f83e51ad917fcc810660"),

        "id" : 1,

        "name" : "张三",

        "address" : [

                "北京朝阳",

                "北京海淀"

        ]

}

 


删除元素 pop


> db.t_user.find({}).pretty();

{

        "_id" : ObjectId("5844fafe51ad917fcc810661"),

        "id" : 1,

        "name" : "张三",

        "address" : [

                "北京",

                "上海",

                "广州"

        ]

}

> db.t_user.update({id:1},{$pop:{address:1}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.find({}).pretty();

{

        "_id" : ObjectId("5844fafe51ad917fcc810661"),

        "id" : 1,

        "name" : "张三",

        "address" : [

                "北京",

                "上海"

        ]

}

 


使用pull删除指定元素


> db.t_user.find({}).pretty();

{

        "_id" : ObjectId("5844fafe51ad917fcc810661"),

        "id" : 1,

        "name" : "张三",

        "address" : [

                "北京",

                "上海",

                "广州"

        ]

}

> db.t_user.update({id:1},{$pull:{address:'广州'}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.t_user.find({}).pretty();

{

        "_id" : ObjectId("5844fafe51ad917fcc810661"),

        "id" : 1,

        "name" : "张三",

        "address" : [

                "北京",

                "上海"

        ]

}

 
MongoDB 索引


 查看索引


> db.t_user.getIndexes();

[

        {

                "v" : 1,

                "key" : {

                        "_id" : 1

                },

                "name" : "_id_",

                "ns" : "zpark.t_user"

        }

]

 


创建索引


> db.t_user.ensureIndex({name:1},{name:'name_index'})

{

        "createdCollectionAutomatically" : false,

        "numIndexesBefore" : 1,

        "numIndexesAfter" : 2,

        "ok" : 1

}

 

 name:1表示给name field创建索引,这里的1或者-1表示索引的排列顺序。


 创建复合索引


>  db.t_user.ensureIndex({name:1,age:1},{name:'name_age__index'})

{

        "createdCollectionAutomatically" : false,

        "numIndexesBefore" : 2,

        "numIndexesAfter" : 3,

        "ok" : 1

}

 


删除索引


> db.t_user.dropIndex('name_index');

{ "nIndexesWas" : 4, "ok" : 1 }

 


创建唯一索引


> db.t_user.ensureIndex({email:1},{name:'email_index',unique:true})

{

        "createdCollectionAutomatically" : false,

        "numIndexesBefore" : 3,

        "numIndexesAfter" : 4,

        "ok" : 1

}

 


创建稀疏索引


> db.t_user.ensureIndex({email:1},{name:'email_index',unique:true,sparse:true})

{

        "createdCollectionAutomatically" : false,

        "numIndexesBefore" : 3,

        "numIndexesAfter" : 4,

        "ok" : 1

}

 

所谓的稀疏索引指的是MongoDB不会对null值做唯一检查。


创建TTL索引


db.t_login.ensureIndex({createTime:1},{expireAfterSeconds:60,name:'createTimeTTL_index'}); 

{ "createdCollectionAutomatically" : false,

        "numIndexesBefore" : 2,

        "numIndexesAfter" : 2,

        "note" : "all indexes already exist",

        "ok" : 1

}

 

所谓的TL索引指的是Time To Live索引,MongoDB会将过期的文档删除,但必须要求TTL索引列必须是日期类型的值。

本章列举了MongoDB的一些基本shell命令更多精彩内容敬请订阅jiangzz_wy公众账号,感谢您的持续关注。

继续关注
GUAN ZHU


友情链接
Copyright © 广州便签纸价格交流组@2017