常用命令
> show dbs -- 查看数据库列表
> use admin --创建admin数据库,如果存在admin数据库则使用admin数据库
> db ---显示当前使用的数据库名称
> db.getName() ---显示当前使用的数据库名称
> db.dropDatabase() --删当前使用的数据库
> db.repairDatabase() --修复当前数据库
> db.version() --当前数据库版本
> db.getMongo() --查看当前数据库的链接机器地址
> db.stats() 显示当前数据库状态,包含数据库名称,集合个数,当前数据库大小 ...
> db.getCollectionNames() --查看数据库中有那些个集合(表)
> show collections --查看数据库中有那些个集合(表)
> db.person.drop() --删除当前集合(表)person
1.创建数据库
MongoDB 创建数据库的语法格式如下
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。
实例
以下实例我们创建了数据库 mongo:
> use mongo switched to db mongo > db mongo >
如果你想查看所有数据库,可以使用 show dbs 命令:
> show dbs local 0.078GB test 0.078GB >
可以看到,我们刚创建的数据库 mongo 并不在数据库的列表中, 要显示它,我们需要向 mongo 数据库插入一些数据。
> db.mongo.insert({"name":"mongodb中文网"}) WriteResult({ "nInserted" : 1 }) > show dbs local 0.078GB mongo 0.078GB test 0.078GB >
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
> db.persons.find()//查需 { "_id" : ObjectId("5a390f654ae5450f735b4a29"), "name" : "alen" } { "_id" : ObjectId("5a39104d4ae5450f735b4a2a"), "name" : "alex" } > db.persons.findOne()//返回第一条
2.删除数据库
MongoDB 删除数据库的语法格式如下:
db.dropDatabase()
删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。
实例
以下实例我们删除了数据库 mongo。
首先,查看所有数据库:
> show dbs local 0.078GB mongo 0.078GB test 0.078GB
接下来我们切换到数据库 mongo
> use runoob switched to db mongo >
执行删除命令:
> db.dropDatabase() { "dropped" : "runoob", "ok" : 1 }
最后,我们再通过 show dbs 命令数据库是否删除成功:
> show dbs local 0.078GB test 0.078GB >
3.删除集合
集合删除语法格式如下:
db.collection.drop()
4.插入文档
4.1 MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:
db.[documentName].insert({}) db.login.insert({name:"alen"})
批量插入文档shell 这样执行是错误的db.[documentName].insert([{},{},{},……..])
shell 不支持批量插入
想完成批量插入可以用mongo的应用驱动或是shell的for循环
4.2 Save操作
插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
save操作和insert操作区别在于当遇到_id相同的情况下, save完成保存操作, insert则会报错。
5.更新文档
MongoDB 使用 update() 和 save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。
update() 方法
update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
1.强硬的文档替换式更新操作
db.[documentName].update({查询器},{修改器})
强硬的更新会用新的文档代替老的文档
2.主键冲突的时候会报错并且停止更新操作
因为是强硬替换当替换的文档和已有文档ID冲突的时候则系统会报错
3.insertOrUpdate操作
目的:查询器查出来数据就执行更新操作,查不出来就替换操作
做法:db.[documentName].update({查询器},{修改器},true)
4.批量更新操作
默认情况当查询器查询出多条数据的时候默认就修改第一条数据
如何实现批量修改
db.[documentName].update({查询器},{修改器},false,true)
5.使用修改器来完成局部更新操作
6.$addToSet与$each结合完成批量数组更新
db.text.update({_id:1000},{$addToSet:{books:{$each:[“JS”,”DB”]}}})
$each会循环后面的数组把每一个数值进行$addToSet操作
> db.user.find() { "_id" : ObjectId("5a39f91890cf1481126c33e8"), "name" : "test1", "age" : 20 } { "_id" : ObjectId("5a39f92290cf1481126c33e9"), "name" : "test1", "age" : 21 } { "_id" : ObjectId("5a39f93190cf1481126c33ea"), "name" : "test1", "age" : 22 } { "_id" : ObjectId("5a39f9ba90cf1481126c33eb"), "name" : "test1", "address" : [ "index1", "index2", "index3" ] } > db.user.update({"_id" : ObjectId("5a39f9ba90cf1481126c33eb")},{$addToSet:{address:{$each:["ok1","ok2"]}}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.user.find() { "_id" : ObjectId("5a39f91890cf1481126c33e8"), "name" : "test1", "age" : 20 } { "_id" : ObjectId("5a39f92290cf1481126c33e9"), "name" : "test1", "age" : 21 } { "_id" : ObjectId("5a39f93190cf1481126c33ea"), "name" : "test1", "age" : 22 } { "_id" : ObjectId("5a39f9ba90cf1481126c33eb"), "name" : "test1", "address" : [ "index1", "index2", "index3", "ok1", "ok2" ] }
7.存在分配与查询效率
当document被创建的时候DB为其分配没存和预留内存当修改操作不超过预留内层的时候则速度非常快反而超过了就要分配新的内存则会消耗时间
实例
更新手机号
> db.user.insert({name:"alen",phone:"123456"}) WriteResult({ "nInserted" : 1 }) > db.user.find() { "_id" : ObjectId("5a39c8f89007d459e7fbb839"), "name" : "alen", "phone" : "123456" } > db.user.update({name:"alen"},{$set:{phone:"073456"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.user.find() { "_id" : ObjectId("5a39c8f89007d459e7fbb839"), "name" : "alen", "phone" : "073456" }
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
> db.user.find() { "_id" : ObjectId("5a39c8f89007d459e7fbb839"), "name" : "alen", "phone" : "073456" } { "_id" : ObjectId("5a39c9bb9007d459e7fbb83a"), "name" : "alen", "phone" : "123456" } { "_id" : ObjectId("5a39c9c09007d459e7fbb83b"), "name" : "alen", "phone" : "123456" } > db.user.update({name:"alen"},{$set:{phone:"073456"}},{multi:true}) WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 2 }) > db.user.find() { "_id" : ObjectId("5a39c8f89007d459e7fbb839"), "name" : "alen", "phone" : "073456" } { "_id" : ObjectId("5a39c9bb9007d459e7fbb83a"), "name" : "alen", "phone" : "073456" } { "_id" : ObjectId("5a39c9c09007d459e7fbb83b"), "name" : "alen", "phone" : "073456" }
save() 方法
save() 方法通过传入的文档来替换已有文档。语法格式如下:
db.collection.save( <document>, { writeConcern: <document> } )
参数说明:
document : 文档数据。
writeConcern :可选,抛出异常的级别。
实例
> db.user.find() { "_id" : ObjectId("5a39c8f89007d459e7fbb839"), "name" : "alen", "phone" : "073456" } { "_id" : ObjectId("5a39c9bb9007d459e7fbb83a"), "name" : "alen", "phone" : "073456" } { "_id" : ObjectId("5a39c9c09007d459e7fbb83b"), "name" : "alen", "phone" : "073456" } > db.user.save({"_id" : ObjectId("5a39c8f89007d459e7fbb839"), "name" : "replace",address:"china"}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.user.find() { "_id" : ObjectId("5a39c8f89007d459e7fbb839"), "name" : "replace", "address" : "china" } { "_id" : ObjectId("5a39c9bb9007d459e7fbb83a"), "name" : "alen", "phone" : "073456" } { "_id" : ObjectId("5a39c9c09007d459e7fbb83b"), "name" : "alen", "phone" : "073456" }
6.删除文档
MongoDB remove()函数是用来移除集合中的数据。
remove() 方法的基本语法格式如下所示:
db.collection.remove( <query>, <justOne> )
参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
writeConcern :(可选)抛出异常的级别。
以下文档我们执行两次插入操作:
>db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: 'MongoDB中文网', url: 'http://www.mongodb.org.cn', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
使用 find() 函数查询数据:
> db.col.find() { "_id" : ObjectId("56066169ade2f21f36b03137"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "MongoDB中文网", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } { "_id" : ObjectId("5606616dade2f21f36b03138"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "MongoDB中文网", "url" : "http://www.mongodb.org.cn", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
接下来我们移除 title 为 'MongoDB 教程' 的文档
>db.col.remove({'title':'MongoDB 教程'}) WriteResult({ "nRemoved" : 2 }) # 删除了两条数据 >db.col.find() …… # 没有数据
如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:
>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令):
>db.col.remove({}) >db.col.find() >