mongodb 常用命令

128 阅读3分钟

显示数据库 show dbs

切换数据库 use tst

显示集合 show collections

创建集合 db.createCollection("emp")

删除集合 db.emp.drop()

安全认证

设置管理员用户名密码需要切换到admin库 use admin

创建管理员 db.createUser({user:"fox",pwd:"fox",roles:["root"]})

验证:db.auth("fox","fox") 返回1 说明成功(好像必须的做)

查看所有用户信息show users

删除用户 db.dropUser("fox")

默认情况下,MongoDB不会启用鉴权,以鉴权模式启动MongoDB:mongod -f /mongodb/conf/mongo.yaml --auth

启用鉴权之后,连接MongoDB的相关操作都需要提供身份认证。mongo -ufox -pfox --authenticationDatabase=admin

例如:

1.创建应用数据库用户 use appdb db.createUser({user:"appdb",pwd:"fox",roles:["dbOwner"]})

2.先关闭启动 mongod -f /mongodb/conf/mongo.conf --auth

3.登录:mongo -uappdb -pfox --authenticationDatabase=appdb

插入文档

use appdb:切换到对应数据库(默认test数据库)

1.插入一条记录 db.emp.insert({name:"张三",age:"25"}):不存在集合会自己创建一个

2.插入多个:db.emp.insertMany([{name:"李四",age:"24"},{name:"王五",age:"21"},{name:"赵六",age:"28"}])

3.执行脚本 books.js 注意直接放在项目同级目录/或者直接命令执行脚本

var tags = ["nosql","mongodb","document","developer","popular"];
var types = ["technology","sociality","travel","novel","literature"];
var books=[];
for(var i=0;i<50;i++){
var typeIdx = Math.floor(Math.random()*types.length);
var tagIdx = Math.floor(Math.random()*tags.length);
var favCount = Math.floor(Math.random()*100);
var book = {
title: "book-"+i,
type: types[typeIdx],
tag: tags[tagIdx],
favCount: favCount,
author: "xxx"+i
};
books.push(book)
}
db.books.insertMany(books);

查询文档

find 查询集合中的若干文档。语法格式如下: b.collection.find(query, projection)

  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参 数即可(默认省略)。投影时,id为1的时候,其他字段必须是1;id是0的时候,其他字段可以是 0;如果没有_id字段约束,多个其他字段必须同为0或同为1。

1.查看数据:db.books.find() 查出所有文档 一次只会选择20条

2.条件查询:db.books.find({"title":"book-20"}) :title为20的书

3.指定返回字段:db.books.find({"title":"book-20"},{title:1,favCount:1}) id默认会返回

4.收藏数超过60的文档:db.books.find({type:"travel",favCount:{$gt:60}})

5.查询tag为nosql或者document的数据:db.books.find({tag:{$in:["nosql","document"]}})

查询条件对照表 image.png

查询逻辑对照表 image.png

6.排序&分页:

db.books.find({type:"travel"}).sort({favCount:-1}):指定按收藏数(favCount)降序返回

db.books.find().skip(8).limit(4):skip用于指定跳过记录数,limit则用于限定返回结果数量

7.则表达式匹配查询

db.books.find({type:{$regex:"so"}}) 使用正则表达式查找type包含 so 字符串的book

更新文档

可以用update命令对指定的数据进行更新,命令的格式如下: db.collection.update(query,update,options)

  • query:描述更新的查询条件;
  • update:描述更新的动作及新的内容;
  • options:描述更新的选项
    • upsert: 可选,如果不存在update的记录,是否插入新的记录。默认false,不插入
    • multi: 可选,是否按条件查询出的多条记录全部更新。 默认false,只更新找到的第一条记录
    • writeConcern :可选,决定一个写操作落到多少个节点上才算成功。

1.新单个文档

根据文档id对favCount字段自增:db.books.update({_id:ObjectId("6379f6a6531eae0a33ecb120")},{$inc:{favCount:1}})

2.新多个文档

默认情况下,update命令只在更新第一个文档之后返回,如果需要更新多个文档,则可以使用multi选项/。 db.books.update({type:"novel"},{$set:{publishedDate:new Date()}},{"multi":true})

upsert是一种特殊的更新,其表现为如果目标文档不存在,则执行插入命令 db.books.update( {title:"my book"}, {$set:{tags:["nosql","mongodb"],type:"none",author:"fox"}}, {upsert:true} )

update命令的选项配置较多,为了简化使用还可以使用一些快捷命令:

  • updateOne:更新单个文档。
  • updateMany:更新多个文档。
  • replaceOne:替换单个文档。

3.findAndModify命令

findAndModify兼容了查询和修改指定文档的功能

将某个book文档的收藏数(favCount)加1 db.books.findAndModify({ query:{_id:ObjectId("61caa09ee0782536660494dd")}, update:{$inc:{favCount:1}} })

默认情况下,findAndModify会返回修改前的“旧”数据。如果希望返回修改后的数据,则可以指定new选项

db.books.findAndModify({ query:{_id:ObjectId("61caa09ee0782536660494dd")}, update:{$inc:{favCount:1}}, new: true })

删除文档

使用 remove 删除文档

  • remove 命令需要配合查询条件使用;
  • 匹配查询条件的文档会被删除;
  • 指定一个空文档条件会删除所有文档;

1.remove命令会删除匹配条件的全部文档,如果希望明确限定只删除一个文档,则需要指定justOne参 数,

命令格式如下: db.collection.remove(query,justOne) 例如:删除满足type:novel条件的首条记录 db.books.remove({type:"novel"},true)

2.官方推荐使用 deleteOne() 和 deleteMany() 方法删除文档,语法格式如下:

db.books.deleteMany ({}) //删除集合下全部文档

db.books.deleteMany ({ type:"novel" }) //删除 type等于 novel 的全部文档

db.books.deleteOne ({ type:"novel" }) //删除 type等于novel 的一个文档

3.emove、deleteOne等命令在删除文档后只会返回确认性的信息,如果希望获得被删除的文档,则可以 使用findOneAndDelete命令

db.books.findOneAndDelete({type:"novel"})

除了在结果中返回删除文档,findOneAndDelete命令还允许定义“删除的顺序”,即按照指定顺序删除找 到的第一个文档

db.books.findOneAndDelete({type:"novel"},{sort:{favCount:1}})