跳至主要內容

MongoDB Shell 安装及增删改

zhengcog...大约 6 分钟数据库NoSQL

centos7 安装mongoDB shell

wget https://downloads.mongodb.com/compass/mongodb-mongosh-1.10.1.x86_64.rpm

rpm -ivh mongodb-mongosh-1.10.1.x86_64.rpm

连接

mongosh --port 27017

创建数据库

use mytest

如果数据库不存在,则自动创建数据库,否则切换到指定数据库

提示

如果是新数据库,运行show dbs是看不到的,必须插入一条数据,才能看到

查看数据库

show dbs

删除数据库

# 切换到要删除的数据库
use mytest

db.dropDatabase()
# 输出结果
{ ok: 1, dropped: 'mytest' }

创建集合

语法格式:

db.createCollection(name,options)

name: 要创建的集合名称
options: 可选参数,指定有关内存大小及索引的选项

options可选参数列表

字段类型描述
capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
autoIndexId布尔3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size数值(可选)为固定集合指定一个最大值,即字节数。如果 capped 为 true,也需要指定该字段。
max数值(可选)指定固定集合中包含文档的最大数量。

在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。

举个例子

use mytest

# 创建集合 (不带参数)
db.createCollection("zcg")

# 查看已有集合
show collections 或 show tables

# 创建固定集合 mycol,整个集合空间大小 6142800 B, 文档最大个数为 10000 个
db.createCollection("mycol",{capped:true,autoIndexId:true,size:6142800,max:10000})

在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合

删除集合

语法格式:

db.collection.drop()

如果删除成功,则drop()方法返回true,否则返回false

举个例子:

在数据库mytest中,运行show collections查看集合

删除mycol2集合

db.mycol2.drop()

插入文档

所有存储到集合中的数据都是BSON格式

BSON是一种类似JSON的二进制形式的存储格式,是Binary JSON的简称

MongoDB 使用insert()、save()、insertOne()、insertMany() 方法向集合中插入文档,格式如下:

db.collection_name.insert(document)
或
db.collection_name.save(document)
或
db.collection_name.insertOne(document)
或
db.collection_name.insertMany(document)

save()

提示

新版本中已废弃

如果_id主键存在则更新数据,如果不存在就插入数据,该方法在新版本中已废弃,可以使用db.collection.insertOne() 或 db.collection.replaceOne() 代替

insert()

若插入的主键已存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不存在则插入数据

insertOne()

插入单个文档,语法格式如下:

db.collection.insertOne(
  <document>,
  {
      writeConcern: <document>
  }
)

参数说明:

  • document 要写入的文档
  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

insertMany()

插入多个文档,语法格式如下:

db.collection.insertMany(
  [ <document 1> , <document 2>, ... ],
  {
      writeConcern: <document>,
      ordered: <boolean>
  }
)

参数说明:

  • document 要写入的文档
  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

实例

使用insert()方法插入:

db.mytest.insert({"name":"王五"})

使用insertOne()方法插入

db.mytest.insertOne({"name":"张三"})

使用insertMany()方法插入

db.mytest.insertMany([{name:'老六'},{name:'老七',age:32}])

定义为变量document,然后再执行插入

document=({name:'老八'})

db.mytest.insert(document)

更新文档

使用update()、save()、updateOne()、updateMany() 方法更新文档,update()和save()方法在新版本中已废弃,使用updateOne()、updateMany()代替

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: 可选,抛出异常的级别。

更新实例

更新前面插入的例子,更新name=张三,改为name=张三丰

使用update()更新

db.mytest.update({name:'张三'},{$set:{name:'张三丰'}})

使用save()更新

db.mytest.find()

[
  { _id: ObjectId("649ba47d4d4ff6e3018ffe1b"), name: '李四' },
  { _id: ObjectId("649ba6d14d4ff6e3018ffe1c"), name: '老六' },
  { _id: ObjectId("649ba6d14d4ff6e3018ffe1d"), name: '老七', age: 32 },
  { _id: ObjectId("649ba75c4d4ff6e3018ffe1e"), name: '老八' }
]

# 将_id为649ba47d4d4ff6e3018ffe1b的文档数据更新
db.mytest.save({"_id": ObjectId("649ba47d4d4ff6e3018ffe1b"),"name":"李四一"})

使用updateOne()更新

db.mytest.updateOne({"_id": ObjectId("649ba47d4d4ff6e3018ffe1b")},{$set: {"name":"李四一"}})

使用updateMany()更新,更新多个

将name=张三的数据都更新为name=张三丰

db.mytest.updateMany({name:"张三"},{$set: {name:"张三丰"}})

删除文档

使用remove()、deleteOne()、deleteMany()、findOneAndDelete()、bulkWrite()删除文档

remove()

提示

新版本中已废弃

db.mytest.remove({_id: ObjectId("649ba0144d4ff6e3018ffe1a")})

deleteOne()

语法:

db.collection.deleteOne(filter,options)

举例:

db.mytest.deleteOne({_id: ObjectId("649bae674d4ff6e3018ffe1f")})

deleteMany()

语法:

db.collection.deleteMany(filter,options)

举例:

删除name里包含"老"字开头的所有文档

db.mytest.deleteMany({"name":{$regex: /^老/}})

findOneAndDelete()

根据过滤器和排序条件从集合中删除单个文档,并返回删除的文档

语法:

db.Collection_name.findOneAndDelete(
  Selection_criteria,
  {
    projection:<document>,
    sort:<document>,
    maxTimeMS:<number>,
    collation:<document>
  }
)

参数:

  • 第一个参数是选择标准。此参数的类型是文档。
  • 第二个参数是可选的

可选参数:

  • projection:它允许您仅选择必要的数据,而不是从文档中选择整个数据。
  • sort:它指定与选择标准匹配的文档的排序顺序。值1按升序排序,-1则按降序排序。
  • maxTimeMs:这是允许查询运行的最长时间。
  • collation:它指定使用归类进行操作。它允许用户为字符串比较指定language-specific规则,例如字母大写和重音符号规则。此参数的类型是文档。

返回:

  • 如果文档与给定的过滤器查询匹配,则此方法返回已删除的文档。
  • 如果没有文档与给定的过滤器查询匹配,则此方法返回null。

举例:

根据选择标准查找和删除第一个文档

db.mytest.findOneAndDelete({"name":"李四一"})

根据选择条件查找和删除文档,按照年龄字段对文档进行降序排序,然后删除年龄为32岁的第一个文档

db.mytest.findOneAndDelete({"age":32}, {sort:{age:-1}})

批量操作bulkWrite()

语法:

db.collection.bulkWrite(
   [ <operation 1>, <operation 2>, ... ],
   {
      writeConcern : <document>,
      ordered : <boolean>
   }
)

参数:

  • operations array bulkWrite() 写操作的数组。支持操作:insertOne、updateOne、updateMany、deleteOne、deleteMany、replaceOne
  • writeConcern document 可选, write concern 文档,省略则使用默认的 write concern。
  • ordered boolean 可选,表示mongod实例有序还是无序执行操作。默认值true。

返回:

  • 操作基于 write concern 运行则 acknowledged 值为true,如果禁用 write concern 运行则 acknowledged 值为false。
  • 每一个写操作数
  • 成功 inserted 或 upserted文档的 _id 的组数

批量操作实例

db.mytest.bulkWrite(
    [
      {
        insertOne: {
          "document": {
                "_id": 4, "char": "Dithras", "class": "barbarian", "lvl": 4
              }
          }
      },
      {
        insertOne: {
          "document": {
            "_id": 5, "char": "Taeln", "class": "fighter", "lvl": 3
          }
        }
      },
      {
        updateOne:{
            "filter": { "char": "Eldon" },
            "update": { $set: { "status": "Critical Injury" } }
        }
      },
      {
        deleteOne: { "filter": { "char": "Brisbane"} }
      },
      {
        replaceOne:{
          "filter": { "char": "Meldane" },
          "replacement": { "char": "Tanys", "class": "oracle", "lvl": 4 }
        }
      }
    ]
  );

默认情况下 ordered 为 true, 顺序执行时遇到错误就停止执行(后续的操作不会被执行)

查询文档

由于篇幅限制,查询另外开一个新的文档记录 传送门

上次编辑于:
贡献者: Hyman
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5