美文网首页
14. mongodb基础语法 (VUE全栈开发学习笔记)

14. mongodb基础语法 (VUE全栈开发学习笔记)

作者: 笑着字太黑 | 来源:发表于2021-05-12 00:10 被阅读0次
1.什么是mongodb

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

2.安装mongodb

官网:https://www.mongodb.com/try/download/community

配置系统环境变量:

我的电脑-》右键选属性-》高级系统设置-》环境变量-》系统变量-》path-》编辑-》新建
Path:C:\Program Files\MongoDB\Server\4.4\bin\

创建数据库目录:

C:\mongodb\data

运行服务器:

mongod --dbpath C:\mongodb\data

连结服务器:

mongo

连结测试:

localhost:27017
3.基础语法

3.1.查看所有数据库

 show dbs

3.2.创建数据库(连接数据库)

 use test2\. #创建数据库(连接数据库)

 db.addUser('name','pwd') #增加或修改用户密码

 db.system.users.find()#查看用户列表

 db.auth('name','pwd') #用户认证

 db.removeUser('name') #删除用户

 show users#查看所有用户

3.3.增删改查

 db.user.insert({name: 'zhangsan', age: '18'})
 db.user.remove({name: 'lisi'})
 db.user.update({name: 'zhangsan'}, {name: 'lisi', age: '20'})
 db.user.find()
4.查询条件的运算

4.1.比较运算
age大于等于18

db.mycollection1.find( { age:{$gt: 18} } )

可选比较运算符

: 等于
$lt: Less Than
$lte: Less Than or Equal
$gt: Greater Than
$gte: Greater Than or Equal
$ne: Not Equal

4.2.逻辑运算

$and
$or
db.mycollection1.find( {
 $or: [
 { age: {$gte: 20} },
 { salary: {$gt: 5000} },
 { job: "HR" }
 ]
} )

4.3.范围运算

$in
$nin: Not In
$all
db.mycollection1.find( {
 age: {
   $in: [10, 20, 30]
 }
} )
$all和$in类似,但是他需要匹配条件内所有的值:
如有一个对象:
{ a: [ 1, 2, 3 ] }
下面这个条件是可以匹配的:
db.things.find( { a: { $all: [ 2, 3 ] } } );
但是下面这个条件就不行了:
db.things.find( { a: { $all: [ 2, 3, 4 ] } } );

4.4正则表达式

db.mycollection1.find( {
 name: /^Ja\w+$/
} )
# 或
db.mycollection1.find( {
 name: {
   $regex: "/^Jaso\w?$"
 }
} )

4.5.limit和skip

db.mycollection1.find().limit(数量)
db.mycollection1.find().skip(2)

# 混合使用
db.mycollection1.find().limit(10).skip(3)

4.6. 自定义函数查询

自定义查询是指使用自定义函数,格式为$where: function(){...}
db.mycollection1.find( {
 $where: function() {
   return this.age >= 18;
 }
} }

4.7.$size

$size是匹配数组内的元素数量的,如有一个对象:{a:["foo"]},他只有一个元素:
下面的语句就可以匹配:

db.things.find( { a : { $size: 1 } } );

官网上说不能用来匹配一个范围内的元素,如果想找$size<5之类的,他们建议创建一个字段来保存元素的数量。

4.8.existsexists用来判断一个元素是否存在:

db.things.find( { a : { $exists : true } } ); // 如果存在元素a,就返回
db.things.find( { a : { $exists : false } } ); // 如果不存在元素a,就返回

4.9.typetype 基于 bson type来匹配一个元素的类型,像是按照类型ID来匹配,不过我没找到bson类型和id对照表。

db.things.find( { a : { $type : 2 } } ); // matches if a is a string
db.things.find( { a : { $type : 16 } } ); // matches if a is an int

4.10.查询数据内的值
下面的查询是查询colors内red的记录,如果colors元素是一个数据,数据库将遍历这个数组的元素来查询。

db.things.find( { colors : "red" } );

4.11.elemMatch 如果对象有一个元素是数组,那么elemMatch可以匹配内数组内的元素:

> t.find( { x : { $elemMatch : { a : 1, b : { $gt : 1 } } } } )
{ "_id" : ObjectId("4b5783300334000000000aa9"), 
"x" : [ { "a" : 1, "b" : 3 }, 7, { "b" : 99 }, { "a" : 11 } ]
}

elemMatch : { a : 1, b : {gt : 1 } } 所有的条件都要匹配上才行。
注意,上面的语句和下面是不一样的。

> t.find( { "x.a" : 1, "x.b" : { $gt : 1 } } )

$elemMatch是匹配{ "a" : 1, "b" : 3 },而后面一句是匹配{ "b" : 99 }, { "a" : 11 }

4.12.查询嵌入对象的值

db.postings.find( { "author.name" : "joe" } );

4.13.元操作符 $not 取反

db.customers.find( { name : { $not : /acme.*corp/i } } );
db.things.find( { a : { $not : { $mod : [ 10 , 1 ] } } } );

4.14.投影
即搜索的返回值中,只显示指定的某些字段。字段指为0的不现实,
指为1的显示,默认为1。
格式为:

db.mycollection1.find(
 {查询条件},
 {显示与否的选项}
)

如:

db.mycollection1.find(
 {},
 { _id: 0, name: 1, age: 1 }
)

4.15.排序
可以按指定的某些字段排序,字段标记为1的为Asc升序,
标记为-1的为Desc降序。

db.mycollection1.find().sort({ name:1, age:-1 })

4.16.统计

db.mycollection1.find().count()
db.mycollection1.count( {查询条件} )

4.17.消除重复
db.集合名.distinct( "指定字段", {查询条件} )
如:

db.mycollection1.distinct(
 "job",
 { age: {$lt: 40} }
)
5.聚合查询 暂略
6.更新满足条件的2重数组内的值
var filter = {
  'ymd':'YYYY/MM/DD'
}
var arrayFilters = {
  arrayFilters:[
    {
      'userRecord.director':'更新条件'
    },
    {
      'type.type':'更新条件'
    }
  ]
}
 var updater = {'userRecords.$[userRecord].types.$[type].scheduleRecords': 更新数据}
 db.collection(this.collectionName).updateMany(
 filter, updater, arrayFilters, upsert).then(xxx)

参考:https://thecodebarbarian.com/a-nodejs-perspective-on-mongodb-36-array-filters

7.数据库导入导出

7.1. mongodump备份数据库
命令格式:

mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
  如果没有用户密码,可以去掉-u和-p。
  如果导出本机的数据库,可以去掉-h。
  如果是默认端口,可以去掉--port。
  如果想导出所有数据库,可以去掉-d。

把lanzy数据库中的内容导出文件到 /home/admin/下,

mongodump -d lanzy -o /home/admin/

7.2. mongorestore还原数据库
命令格式:

mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径
  如果没有用户密码,可以去掉-u和-p。
  如果导出本机的数据库,可以去掉-h。
  如果是默认端口,可以去掉--port。
  如果想导出所有数据库,可以去掉-d。

把文件 /home/admin/lanzy 导入到数据库audit中

mongorestore -d lanzy --dir /home/admin/lanzy

7.3. mongoexport导出表,或者表中部分字段
命令格式:

mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -q 条件导出 --csv -o 文件名
  -f:导出指字段,以逗号分割,-f a,b,c,嵌套格式的字段格式为:a.b
  -q:格式为,-q '{ "user" : "lanzy" }' 导出user为lanzy的数据
  --csv:建议使用 --type csv

7.4. mongoimport导入表,或者表中部分字段
7.4.1.还原整表导出的非csv文件

mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsert --drop 文件名  
  --upsert 插入或者更新现有数据

7.4.2,还原部分字段的导出文件

mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsertFields 字段 --drop 文件名  
  --upsertFields跟--upsert一样

7.4.3,还原导出的csv文件

mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --type 类型 --headerline --upsert --drop 文件名 

相关文章

网友评论

      本文标题:14. mongodb基础语法 (VUE全栈开发学习笔记)

      本文链接:https://www.haomeiwen.com/subject/dwmsdltx.html