博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB常用命令
阅读量:4155 次
发布时间:2019-05-25

本文共 3584 字,大约阅读时间需要 11 分钟。

目录

一、操作MongoDB数据库

1、创建数据库

语法:use 数据库名

注意:(1)如果数据库不存在,则创建;反之则切换到指定数据库
(2)如果刚刚创建的数据库不在列表内,如果要显示它,我们需要向刚刚创建的数据库
中插入一些数据(db.student.insert({name:‘Tom’, age:18, gender:1,address:“北京”,isDelete:0}))。

2、查看所有数据库

语法:show dbs/databases

3、查看当前正在使用的数据库

语法1:db

语法2:db.getName()

4、断开连接

语法:exit

5、查看命令api

语法:help

6、删除数据库

db.dropDatabase()

二、集合操作

1、查看当前数据库下有哪些集合

show collections

2、创建集合

语法1:db.createCollection(“集合名”)

语法2:db.集合名.insert(document)#当集合不存在时创建集合

3、删除当前数据库中的集合

语法:db.集合名.drop()

示例:db.class.drop()

4. 集合重命名

db.collection_name.renameCollection(‘new_name’)

5. 获取集合对象

db.getCollection(‘collection_name’)

等价于db.collection

注意集合的命名规则:
1) 合法的utf-8字符串
2) 不能有’\0’
3) 不能以system开头,因为是系统的保留前缀
4)不能和关键字重复

三、文档操作

1、插入文档

语法1:使用insert()方法插入文档

db.集合名.insert(文档)
插入一条:
db.student.insert({name:‘Sun’, age:28, gender:1,address:“北京”,isDelete:0})
插入多条:
语法2:使用save()方法插入文档
db.集合名.save(文档)
说明:如果不指定_id字段,save()方法类似于insert()方法。如果指定_id字段,则会更新_id字段的数据
插入一条:
db.student.save({name:‘赵六’, age:22, gender:1,address:“济南”,isDelete:0})
db.student.save({_id:objectId(""),name:‘赵六’, age:22, gender:1,address:“济南”,isDelete:0})

2、查询文档

语法:

db.collection_name.find(query,field)

相当于 mysql中的 select *

query 筛选条件,相当于MySQL的where子句

field 选择要展示的域

返回值: 返回查找到的文档

需要理解的点:

query 和 field都是可选参数,不写参数就默认显示所有文档,也只有查找时不用传入query,一般其他操作都需要传入query进行筛选

query 以键值对的形式给出查找条件

field 以键值对的形式给出要展示或者不展示的 域为键,值时0时不显示该域, 值是1时显示该域,这是mongodb特有的特性

例如:为了避免看到一大串的id值,在查找时_id 域经常会被设置为0

db.class.find( {},{_id :0} ) 除了_id 域,其他域都正常显示

注意:

在写第二个参数时必须要写第一个参数

第二个参数只能同时限制多个域的0/1值,不能多个域都设置不同,否则其他没设置的域会混乱,_id域的设置除外(即无论_id域怎么设

置都不影响其他域的设置)

好了,重点中的重点来了

query的使用

因为键值对无法进行像MySQL中where子句那样强大的筛选作用(键值对筛选相当于MySQL中where子句筛选的等于条件),mongodb引入了操作符操作符的表达形式是以键值对形式出现的。下面介绍几种常用的操作符,更多的操作符可以查看Mongodb的官方文档。

1)比较操作符

$eq 等于操作符

例如:db.class.find( {age: {$eq : 18} },{_id :0} )

更多操作符:

$gt   大于操作符 $lt   大于操作符$ lte  小于等于操作符

$gte 大于等于操作符

$ne 不等于操作符

细节:mongodb中多种类型的数据都是可以比较的,例如数值类型,字符串类型

2)范围操作符

$ in [ ] 在范围集合内的文档被匹配 (连续的范围)

例如:db.class.find( {age: {$in : [18, 23]} },{_id :0} )

如果是用 $ and只能这样表达: KaTeX parse error: Expected '}', got 'EOF' at end of input: and:[{age:{

gt:… } }, {age:{$lt:… } } ]

用gt和lt一起用来把范围括起来

$ nin[ ] 不在范围集合内的文档被匹配

3)逻辑操作符

$ and: [ ] 和运算符

query 中如果多个条件用逗号隔开,就为and关系(类似mysql中的where子句中的and)

例如:db.class.find( {

KaTeX parse error: Expected '}', got 'EOF' at end of input: and: [{age: {
gt 17}, {age: {$ lt 22} ],{_id :0} ) 查询年龄大于17,小于22的同学
用$ and 可以改写为 db.class.find({$ and : [{ age: 17} ,{sex: ‘M’ } ] },{_id :0} )
[ ]内一定要分成连个字典来表示两个条件,否则(只用一个字典来包含两个条件并用逗号分隔)在语法上就只表示一个条件,只不过这个条件里面包含两个条件而已
一般平常使用多直接用逗号来分隔条件而不用 $and的操作符

$ or 或运算符

语法表达上跟 $ and 一样,表达的是或逻辑筛选

**KaTeX parse error: Expected '}', got 'EOF' at end of input: …s.find( {age: {

not {$ gt 17} } },{_id :0} ) 匹配年龄小于等于17的文档
注意: $not 一般添加在条件值的前面,对值进行取反

$ nor 既不也不运算符

not(A or B) --> not A and not B
db.class.find({$ nor : [{ age: 17} ,{sex: ‘M’ } ] },{_id :0} )
注意:如果筛选匹配的文档的域是其他文档不具备的;即一个域有些文档有值,有些文档没值,这种筛选是无法匹配的

查询操作的另一条语法

findOne(query,field)
查找符合条件的第一条文档
参数跟find一样

3、删除文档

MongoDB删除数据的命令比较简单,也没有太多的变化

语法:

db.collection.remove(query ,justOne)

参数:

query与上文查询操作的query相同,justone表示只是删除匹配到的多条文档中的第一条文档

4、更新文档

语法:

db.collection.update(query,update,upsert,multi)

与mysql不同,mongodb所有修改操作都用update,包括对集合的域值的修改和集合结构的修改

参数:query 筛选要修改的文档,相当于where

update 将筛选的文档修改为什么内容,相当于set,需要配合修改操作符一起使用
upsert 布尔值,默认为false,如果query文档不存在则不进行修改 ,如果为true,在文档不存在条件下,则根据query和update插入新文档
multi 布尔值,默认为false如果query筛选的为多条,则只修改第一条,如果设置为true,则修改所有符合条件文档

注意:

upset 一般为用默认值false,因为如果原本没匹配的文档,很有可能是程序员自己输错了某些内容

修改操作符:

$ set如果没有该文档,需要插入的时候是根据查询条件和设置条件作为域来插入的

如果需要修改的值为多个,就像插入数据一样,将不同域的值用一个{ }包起来,例如:

db.class.update({name:‘小张’},{$set:{age:16,sex:‘m’}},true)

转载地址:http://avrti.baihongyu.com/

你可能感兴趣的文章
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
laravel 修改api返回默认的异常处理
查看>>
laravel事务
查看>>
【JavaScript 教程】浏览器—History 对象
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
Flex 布局教程:语法篇
查看>>
年薪50万+的90后程序员都经历了什么?
查看>>
2019年哪些外快收入可达到2万以上?
查看>>
【JavaScript 教程】标准库—Date 对象
查看>>
前阿里手淘前端负责人@winter:前端人如何保持竞争力?
查看>>