解读MongoDB官方文档获取mongo7.0版本的安装步骤与根本使用 ...

打印 上一主题 下一主题

主题 981|帖子 981|积分 2943

mongo式一款NOSQL数据库,用于存储非结构化数据,mongo是一种用于存储json的数据数据,可以通过mongo提供的命令解析json获取想要的值。
数据模型

了解关系数据库会很熟悉database,table,row,column的概念,分别是数据库,表,行,列所构成的二维表,而在mongo中没有存储的是json,在新的数据模型中主要数据模型有db(数据库),collection(集合),document(文档),field(属性)。

在mongo中一个db数据库存储多个collection;一个collection的结构如下:
  1. // collection
  2. {
  3.   "userId": 1,
  4.   "id": 1,
  5.   "title": "delectus aut autem1",
  6.   "completed": false
  7. }
  8. {
  9.   "userId": 2,
  10.   "id": 2,
  11.   "title": "delectus aut autem2",
  12.   "completed": false
  13. }
复制代码
而每一个结构就是一个document(文档):
  1. {
  2.   "userId": 2,
  3.   "id": 2,
  4.   "title": "delectus aut autem2",
  5.   "completed": false
  6. }
复制代码
其中的userId,id等都是field(属性)。
安装


  • 主机安装
Ubuntu官方安装文档
依次按照官网的命令执行就可以了

左侧可以选安装版本,尽量别选最新的哈,小编在主机上安装时遇到了一些题目导致主机安装未成功。(保举使用docker 安装)

安装完之后,还需要安装mongo shell用于与mongo server交互,通过命令行的方式操纵数据官方下载地点。
mongo shell docs
假如安装没有修改设置文件使用mongosh会自动连接mongdb://localhost:27017,假如修改了设置文件大概端口使用mongosh "mongodb://localhost:27017"编辑端口即可。

   mongo会链接一个默认的数据库。
  除了使用mongo shell外还可以使用mongo compass GUI工具,下载地点
mongo compass 内部也集成来mongo sh在左下角


  • docker安装
  1. docker pull mongo
  2. docker run --name mongo -id -P mongo
复制代码
使用docker安装看起来要方便许多,安装成功映射到主机端口和mongo shell和mongo compass是一样的。
命令行操纵

CURD
通过mongo shell是直接的操纵方式,具体的CURD操纵如下:
插入

db.collection.insertOne()
db.collection.insertMany()


>除了上述插入方式外还可以借助mongo compass 导入csv等数据。
更新数据


更新有三个参数,分别是过滤器,更新内容,条件
  1. db.inventory.updateOne(
  2.    { item: "paper" },
  3.    {
  4.      $set: { "size.uom": "cm", status: "P" },
  5.      $currentDate: { lastModified: true }
  6.    }
  7. )
复制代码
$set关键字用于更新具体内容,$currentDate 关键字用于把lastModified字段设置为最近修改时间,没有该字段就创建。
   第一个参数是条件,可以使用比力计算符。
  删除数据


db.inventory.deleteMany({ status : "A" })
   删除也是匹配删除。
  db.inventory.deleteOne( { status: "D" } )
   删除一个。
    比力关键字都可以使用。
  命令行查找

db.collection.find()
查询全部


   inventory是collection名,test是数据库名,_id是每个collecttion的标识。
  精确匹配

find内部可以使用{ <field1>: <value1>, ... }表示查询条件。

   find会查询全部的document找出filed匹配的项。{}不使用关键字的环境下就是json数据,该方法就是查询与其不停的数据。
  IN查询

db.inventory.find( { status: { $in: [ "A", "D" ] } } )

   in可以使用or 替换
  AND查询


   条件一起写就是and。
  比力查询

$lt是<
含糊查询$regex

$regex是like。
$regex: '^p'为前缀查询,^起前后缀作用。


  • 阶级查询
固然比力的关键字另有许多,后续会先容。这里先容另一种查询方法.,field.nestedField
  1. db.inventory.find( { "size.uom": "in" } )
  2. # 等价
  3. db.inventory.find(  { size: { w: 21, h: 14, uom: "cm" } }  ) # 不好写
复制代码
  这种方式使用多级阶层的查询。
  匹配列表

Json的valu也是支持数组的,也需要匹配列表查询。
精确匹配


   只能拥有查询的列表元素。
  子集匹配$all

db.inventory.find( { tags: { $all: ["gel"] } } )

   只要拥有查询条件的列表元素即可,即查询条件是数据的子集。
  单位素查询

db.inventory.find( { tags: "red" } )
   查询条件没有列表只有一个元素,全部包含该元素的的数据都会被查询出来。
  列表过滤查询

  1. # dim_nml类型为[ 10, 15.25 ]
  2. # 查找小于25的
  3. db.inventory.find( { dim_cm: { $gt: 25 } } )
  4. # db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
  5. db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
  6. # $elemMatch关键字用于多条件查询
  7. db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
复制代码
  在列表中也可以使用比力关键字,用于过滤。
  列表索引查询

db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
   .1是列表的索引条件,$gt是比力条件
  列表长度查询

db.inventory.find( { "tags": { $size: 3 } } )
   $size关键字表示列表长度,长度为3的将被查询出来。
  列表中json元素查询

  1. db.inventory.insertMany( [
  2.    { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
  3.    { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
  4.    { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
  5.    { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
  6.    { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
  7. ]);
复制代码
  该数据列表的数据元素也为json。
  db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
   假如列表内部也是json元素,把列表当做一个document处置惩罚即可。
  指定返回字段查询

直接使用find加条件查询返回全部field。在查询条件后可添加json字段返回指定字段。
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
甚至可以隐藏掉_id
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
   可以看出1是显示,0是隐藏。
  也可以反着用,排除返回
db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )
多层次结构也要使用.来构造
db.inventory.find( { status: "A" }, { item: 1, status: 1, "size.uom": 1 } )
存在数组的查询也是如此
shell db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
也可以同时使用比力查询
db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } } )
空值查询

mongo提供了null关键字用于空值查询。
  1. db.inventory.insertMany([
  2.    {  item: null },
  3. ])
复制代码
空值比力查询
  1. db.inventory.find( { item: { $ne : null } } )
复制代码
有爱好的话可以了解下$type和$exists关键字。
官方方法集合

上述只是先容了一部分常用的方法,更多一步官方方法集合
包含数据库方法,查询,删除,更新等方法。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表