若是你尚未安装,能够参考下这个文章,mondodb基本安装和curdphp
首先推荐个工具,no-sql-manager-for-mongodb-professional,虽然收费,可是每月能够从新注册。 无限次使用下载html
插入两条数据java
use demo db.demo.insert({name:2}) db.demo.insert({name:3})
更新name为4不存在的数据,对数据没有任何影响db.demo.update({name:4},{age:4})
node
update第三个参数加true表示对更新不存在数据时候自动添加这条数据,可是下面的语句是把name干掉了,只剩下age字段,由于没有$set操做符python
db.demo.update({name:3},{age:3},true)
mysql
请本身比较下面两区别db.demo.update({name:99},{$set:{age:213}},true)
db.demo.update({name:99},{age:213},true)
jquery
如今数据以下git
{ "_id" : ObjectId("561f890aa5688363f84bf0bb"), "name" : 2 } { "_id" : ObjectId("561f89486adf558520f65efc"), "age" : 3 } { "_id" : ObjectId("561f88f5a5688363f84bf0ba"), "age" : 3, "name" : 3 }
让3岁孩子上小学db.demo.update({age:3},{$set:{school:1}})
github
这样age=3的其中一个就有学上了redis
{ "_id" : ObjectId("561f890aa5688363f84bf0bb"), "name" : 2 } { "_id" : ObjectId("561f88f5a5688363f84bf0ba"), "age" : 3, "name" : 3 } { "_id" : ObjectId("561f89486adf558520f65efc"), "age" : 3, "school" : 1 }
可是想要全部的3岁孩子上小学,须要第四个参数为true第三个参数false表明若是不存在,没必要插入新的数据,另外由于第四个参数是true,表明批量更新
db.demo.update({age:3},{$set:{school:1}},false,true)
复习:请本身比较如下两条代码
db.demo.update({age:3},{$set:{school:1}},false,true) db.demo.update({age:4},{$set:{school:2}},true,true)
咱们在加一个四岁的孩子,直接给他学上,即便没有四岁的孩子也要造一个让他上小学二年级,由于第三个参数是true
db.demo.update({age:4},{$set:{school:2}},true,true)
{ "_id" : ObjectId("561f890aa5688363f84bf0bb"), "name" : 2 }
{ "_id" : ObjectId("561f88f5a5688363f84bf0ba"), "age" : 3, "name" : 3, "school" : 1 }
{ "_id" : ObjectId("561f89486adf558520f65efc"), "age" : 3, "school" : 1 }
{ "_id" : ObjectId("561f8b066adf558520f65efd"), "age" : 4, "school" : 2 }
四岁孩子本身长大了,长大了一岁,$inc,对字段递增
db.demo.update({age:4},{$inc:{age:1}},true,true)
学校也要长大一级,上3年级了,想蹦极就直接school:2
db.demo.update({age:5},{$inc:{school:1}})
{ "_id" : ObjectId("561f890aa5688363f84bf0bb"), "name" : 2 } { "_id" : ObjectId("561f88f5a5688363f84bf0ba"), "age" : 3, "name" : 3, "school" : 1 } { "_id" : ObjectId("561f89486adf558520f65efc"), "age" : 3, "school" : 1 } { "_id" : ObjectId("561f8b066adf558520f65efd"), "age" : 5, "school" : 3 }
删除一些没用的属性 $unset,本身测试-1和1都行。db.demo.update({name:99},{$unset:{age:-1}})
热身完毕,数组
时间到。这是mongo的独特之处哦
添加个id为5的人,名字为5,给他个喜欢的空书单
db.demo.insert({_id:5,name:5,books:[]})
db.demo.find() { "_id" : 5, "name" : 5, "books" : [ ] }
增长一个或者多个元素,给他本myaql看
db.demo.update({_id:5},{$push:{books:"php,mysql"}})
在来一个爱好,反正不要钱
db.demo.update({_id:5},{$push:{habbit:"song,girl,box"}})
{ "_id" : 5,
"name" : 5,
"books" : [ "php,mysql"],
"habbit" : [ "song,movie,girl"]
}
想往数组添加又怕重复,就用$addToSet
db.demo.update({_id:5},{$addToSet:{books:"js,sql"}})
无论上面执行多少次,结果都是
{ "_id" : 5, "name" : 5, "books" : [ "php,mysql", "js,sql" ] }
我想一条语句批量向books添加(node.js,mongo,redis),就这样
db.demo.update({_id:5},{$addToSet:{books:{$each:["node.js",'mongo','redis']}}})
删除一条记录removedb.demo.remove({_id:5})
咱们看数组中的删除操做:假如如今结果这样,咱们来试试删除数组元素{ "_id" : 5, "books" : [ "js", "js,sql", "mongo", "java" ] }
-1表明第一个元素,1表明最后一个元素,本身动手敲吧,孰能生气袄~
db.demo.update({_id:5},{$pop:{books:-1}}) db.demo.update({_id:5},{$pop:{books:1}}) db.demo.update({_id:5},{$pull:{books:"PHP"}})// 用pull 删除指定一个元素 db.demo.update({_id:5},{$pullAll:{books:["js,sql","mongo"]}})// pullAll删除多个元素,注意参数为数组
获取最后错误(执行状况)db.runCommand({getLastError:1})
用find的第二个参数返回只想要的字段,只是查询name字段,0为相反(剔除某个字段,_id也一样试用)db.demo.find({},{name:1)}
查询条件 $lt,$lte,$gt,$gte,$ne,$ne,$in,$nin,$or,$mod,$not
,
查找复合特定要求db.demo.find({name:"u_2"})
建立一个不存在数组字段,默认为空db.demo.update({name:"u_2"},{$set:{'books':[]}},true)
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : ObjectId("563abcde3d94d7df4f645c92") }) db.demo.find({name:'u_2'}) { "_id" : ObjectId("563abcde3d94d7df4f645c92"), "name" : "u_2", "books" : [ ] }
向books数组里里添加元素 phpdb.demo.update({name:"u_2"},{$addToSet:{books:"php"}})
向books批量添加元素并且不会重复添加db.demo.update({name:"u_2"},{$addToSet:{books:{$each:["node","python","php"]}}})
在数组中添加一个元素能够在加一个重复的php,这样里面就有两个php了
db.demo.update({name:"u_2"},{$push:{books:"php"}})
建立一个不存在的数组,并且给他自定义初始值db.demo.update({name:"u_2"},{$addToSet:{todo:{$each:["l","m","n"]}}})
删除todo数组中的尾部 ndb.demo.update({name:"u_2"},{$pop:{todo:1}})
删除todo数组中的头部 l,如今就todo里就剩下n了db.demo.update({name:"u_2"},{$pop:{todo:-1}})
再加些数据,用push和each能够批量添加并且能够重复,如今todo里是有m,l,m,n四个字段db.demo.update({name:"u_2"},{$push:{todo:{$each:["l","m","n"]}}})
删除指定的数组某个元素,咱们就删除最后一个,为n的,如今剩下了mlm三个
db.demo.update({name:"u_2"},{$pull:{todo:"n"}})
更新todo里m的值,为mm,只是更新了第一条匹配到的
db.demo.update({name:"u_2",todo:"m"},{"$set":{"todo.$":"mm"}})
这种也能够,注意要加双引号
db.demo.update({name:"u_2"},{$set:{"todo.1":"www"}})
数组的其余查找 $all,$size,
咱们在来一条新的记录,建立一条新的记录_id为6:
db.demo.insert({_id:6,name:'tb',books:[{type:"js",name:"extjs4.0",author:"tom"},{type:"db",name:"mongo"}]})
再更新下,多加一条
db.demo.update({_id:6},{$set:{books:[{type:"js",name:"extjs4.0",author:"tom"},{type:"db",name:"mongo"},{type:"js",name:"jquery"}]}})
db.demo.find({_id:6}).pretty() { "_id" : 6, "name" : "tb", "books" : [ { "type" : "js", "name" : "extjs4.0", "author" : "tom" }, { "type" : "db", "name" : "mongo" }, { "type" : "js", "name" : "jquery" } ] }
为type是js的books元素添加pens:"too long"属性,使用.符号必定使用双引号引用,用$占位
db.demo.update({"books.type":"js"},{$set:{"books.$.pens":"too long"}})
//增长数组内集合一个新元素,若是"books.type"没有加双引号,会报语法.号错误
{ "_id" : 6, "name":"tb",books" : [ { "type" : "js", "name" : "extjs4.0", "author" : "tom", "pens" : "too long" }, { "type" : "db", "name" : "mongo" }, { "type" : "js", "name" : "jquery" } ] }
db.demo.update({"books.type":"js"},{$set:{"books.$.author":"tb"}})
//更改数据内一个集合新元素,把book里type为js的author改成tb
{ "_id" : 6, "name":"tb","books" : [ { "type" : "js", "name" : "extjs4.0", "author" : "tb", "pens" : "too long" }, { "type" : "db", "name" : "mongo" }, { "type" : "js", "name" : "jquery" } ] }
其余的小操做:
db.demo.find({},{books:0)// 返回除去books之外的全部键值对。1为只返回books的键值对 db.demo.find({age:{"$gte":30,"$lte":40}})//仍是要加双引号哦 db.demo.find({"age":{"$ne":1}})// 不等于$ne db.demo.find({"age":{"$in":[30,2,3,4,5,69]}})//相似于mysql in操做 db.demo.find({"age":{"$in":[1,2,3,4,5,6]}}).forEach(function(doc){ printjson(doc) })
db.version()
查看版本db.getMongo ()
查看当前机器链接地址
如:若是你想建立一个“myTest”的数据库,先运行use myTest
命令,以后就作一些操做(如:db.createCollection('user')
,这样就能够建立一个名叫“myTest”的数据库。
从指定主机上克隆数据库
db.cloneDatabase("127.0.0.1")
; 将指定机器上的数据库的数据克隆到当前数据库
从指定的机器上复制指定数据库数据到某个数据库
db.copyDatabase("mydb", "temp", "127.0.0.1")
;将本机的mydb的数据复制到temp数据库中
修复当前数据库
db.repairDatabase();
删除全部db.demo.remove({})