个人整理的MongoDB学习笔记。。喜欢就点赞,不喜勿喷。
-- 进入mongo数据库
C:\Users\83914>mongo localhost:27017
MongoDB shell version: 2.4.3
connecting to: localhost:27017/test
++++基本操作:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- 创建数据库,使用命令 use 数据库名称
>use mydb1
-- 删除当前数据库,使用命令 db.dropDatabase()
-- 查看所有数据库,使用命令 show dbs
-- 查看当前所在数据库,使用命令 db
-- 查看当前数据库中所有的集合,使用命令 show collections 或使用show tables
++++++++插入操作:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- 创建集合有两种方式,显示创建和隐式创建
-- 显示创建可以使用命令 db.createCollection(“集合名称")
-- 向集合添加文档,使用命令 db.集合名称.insert({}),例如:
db.user1.insert({name:”jack”,age:20})
-- 向集合添加文档,使用命令 db.集合名称.insert({}),集合名称不存在时,会先创建集合,在把文档插入进去 例如:
db.user1.insert({name:”jack”,age:20})
--向集合添加文档,使用命令db.集合名称.save({ });
1.插入文档 db.[documentName].insert({})
2.批量插入文档
shell 这样执行是错误的 db.[documentName].insert([{},{},{},……..])
shell 不支持批量插入
想完成批量插入可以用mongo的应用驱动或是shell的for循环
3.Save操作
save操作和insert操作区别在于当遇到_id相同的情况下
save完成保存操作
insert则会报错
++++++++++删除操作:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--删除集合中的文档,使用命令 db.集合名称.remove({删除条件}),不加删除条件为删除集合中的所有文档,例如,db.c1.remove() 为删除c1集合中的所有文档,db.c1.remove({name:”user1”})为删除c1集合中name为user1的文档
++++++查询操作一:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- 查询集合中的文档,可以使用命令 db.集合名称.find({条件}),或者使用 db.集合名称.findOne() 查询第一个文档
-- 查询集合中的文档,返回某些特定的键值
第二个参数中。。1代表true,0代表false 。。 但是1和0不能同时存在
+++++++++条件表达式:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- 查询集合中的文档 ,使用条件表达式(<, <=, >, >=,!=)
//大于: key值> value值
db.collection.find({key值:{$gt:value值}});
//小于: key值< value
db.collection.find({key值:{$lt:value值}});
//大于等于: key值>= value值
db.collection.find({field:{$gte:value值}});
//小于等于: key值<= value
db.collection.find({key值:{$lte:value值}});
//不等于: key值!= value
db.collection.find({key值:{$ne:value值}});
+++++统计、排序、分页:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--查询集合中的文档 ,统计(count)、排序(sort)、分页(skip、limit)
db.customer.count();
db.customer.find().count();
db.customer.find({age:{$lt:5}}).count();
db.customer.find().sort({age:1}); // 降序-1
db.customer.find().skip(2).limit(3); // 跳过前两个,总共显示三个
db.customer.find().sort({age:-1}).skip(2).limit(3);
db.customer.find().sort({age:-1}).skip(2).limit(3).count();
db.customer.find().sort({age:-1}).skip(2).limit(3).count(0);
db.customer.find().sort({age:-1}).skip(2).limit(3).count(1);
++++++查询操作二:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--查询集合中的文档 ,$all主要用来查询数组中的包含关系,查询条件中只要有一个不包含就不返回
-- 查询集合中的文档 ,$in,类似于关系型数据库中的IN,$in中的数据全部都有,则显示
--查询集合中的文档 ,$nin,与$in相反 $nin中的数据全部都没有,则显示
--查询集合中的文档 ,$or,相当于关系型数据库中的OR,表示或者的关系,例如查询name为user2或者age为3的文档,命令为:
db.customer.find({$or:[{name:”user2”},{age:3}]})
--查询集合中的文档 ,$nor,表示根据条件过滤掉某些数据,例如查询name不是user2,age不是3的文档,命令为:
db.customer.find({$nor:[{name:”user2”},{age:3}]})
--查询集合中的文档 ,$exists,用于查询集合中存在某个键的文档或不存在某个键的文档,例如查询customer集合中存在name键的所有文档,可以使用 db.customer.find({name:{$exists:1}}),
$exists:1表示真,指存在
$exists:0表示假,指不存在
-- 查询集合中的文档 ,类似于关系型数据库,mongodb中也有游标的概念
--查询集合。。模糊查询
-- 查询集合中包含某个字符 {name:/哈/}
db.test.find({name:/哈/});
--查询集合中以某个字符为开头 {name:/^u/}
db.test.find({name:/^u/});
--查询集合中以某个字符为结尾 {name:/哈$/}
db.test.find({name:/哈$/});
+++++++++更新操作:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--更新集合中的文档,语法如下: 更新集合中文档的方法($set,$inc,$unset,$push,$pushAll,$addToSet),都需要和update()连用
$push,$pushAll,$addToSet 用于操作数组。
-- db.collection.update(criteria,objNew,upsert,multi)
参数说明:
criteria:用于设置查询条件的对象
objNew:用于设置更新内容的对象
upsert:如果记录已经存在,更新它,否则新增一个记录,取值为0或1,默认0
multi:如果有多个符合条件的记录,是否全部更新,取值为0或1,默认为0
注意:默认情况下,只会更新第一个符合条件的记录
一般情况下后两个参数分别为0,0 ,即:
db.collection的名字.update(criteria,objNew,0,0)
-- 更新集合中的文档,将集合中name为"haha1"的文档改成age为2的文档
db.ad.update({查询条件},{更新内容});
$set | {$set:{field: value}} | {$set:{name:”uspcat”}} |
--更新集合中的文档,将集合中name为"user2"的文档中的age:2,更改为age:222
db.test.update({查询条件},{$set:{指定更改的内容}});
-- 更新集合中的文档, $set 用来指定一个键的值,如果这个键不存在,则创建它。例如:
给name为user1的文档添加address,可以使用命令:db.c1.update({name:”user1”},{$set:{address:”bj”}},0,1)
将name为user1的文档修改address为tj,其它键值对不变,命令为:
db.c1.update({name:”user1”},{$set:{address:”tj”}},0,1)
-- 更新集合中的文档,使用 $inc 将集合中name为user1的age加1,其它键不变, $inc表示使某个键值加减指定的数值 {$inc:{age:-1}}
$inc | { $inc : { field : value } } | { $inc : { "count" : 1 } } |
-- 更新集合中的文档, $unset 用来删除某个键,例如删除name为user1的文档中的address键,可以使用命令:
$unset | { $unset : { field : 1} } | { $unset : { “name":1 } |
-- 可同时作用于多个键
db.test1.update({_id:5},{$unset:{name:1,book2:1}});
db.集合.update({查询条件},{修改器},不存在将要修改的键是否创建,是否批量修改); 后两个参数:0或false表示否,1或true表示是
db.c1.update({name:”user1”},{$unset:{address:1}},0,1);
db.test1.update({_id:1},{$unset:{name:1}},0,1);
-- 通过$unset删除文档中的数组,无论是否有值都将没删除。
db.test1.update({_id:5},{$unset:{book:1}});
或
db.test1.update({_id:5},{$unset:{book:[]}});
-- 更新集合中的文档,$push 对数组中的数据进行更新
$push | { $push : { field : value } } | { $push : { books:”JS”} |
1.如果指定的键是数组增追加新的数值
2.如果指定的键不是数组则中断当前操作 Cannot apply $push/$pushAll modifier to non-array
3.如果不存在指定的键则创建数组类型的键值对 |
--更新集合中的文档,$pushAll 对数组中的数据进行批量添加
$pushAll { $pushAll : { field : array } } { $push : { books:[“EXTJS”,”JS”]}
用法和$push相似他可以体谅添加数组数据
目标数组存在此项则不操作,不存在此项则加进去
$addToSet { $addToSet: { field : value } } { $addToSet: { books:”JS”}
从指定数组删除一个值1删除最后一个数值,-1删除第一个数值
$pop {$pop:{field: value}} {$pop:{name:1}} {$pop:{name:-1}}
删除一个被指定的数值
$pull { $pull: { field : value } } { $pull : { “book" : “JS” } }
一次性删除多个指定的数值
$pullAll { $pullAll: { field : array} } { $pullAll: { “name":[“JS”,”JAVA”] }
$ { $push : { field : value } } { $push : { books:”JS”}
1.数组定位器,如果数组有多个数值我们只想对其中一部分进行操作我们就要用到定位器($)例子: 例如有文档
{name:”YFC”,age:27,books:[{type:’JS’,name:”EXTJS4”},{type:”JS”,name:”JQUERY”},{type:”DB”,name:”MONGODB”}]}
我们要把type等于JS的文档增加一个相同的作者name是author
办法: db.text.update({"books.type":"JS"},{$set:{"books.$.name":"author"}})
-- 查询条件和修改器上面都要加引号
db.test1.update({"books.type":"js"},{$set:{"books.$.name":"2"}});