mongodb使用总结02 - CURD

小编 2026-06-05 阅读:1369 评论:0
具体详细函数请参阅MongoDB文档 数据库 创建以及切换数据库(第一次创建数据库并不真正的创建数据库, 只有插入第一条数据之后数据库才会真正创建) use DATABASE_NAME...

具体详细函数请参阅MongoDB文档

数据库

  • 创建以及切换数据库(第一次创建数据库并不真正的创建数据库, 只有插入第一条数据之后数据库才会真正创建)
use DATABASE_NAME
  • 查看当前数据库
db
  • 查看所有数据库
show dbs
  • 删除数据库(要切换到对应的数据库下)
db.dropDatabase()
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
> 
> use testoob
switched to db testoob
> 
> db
testoob
> 
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
>
> 
> db.testoob.insertOne({})
{
    \"acknowledged\" : true,
    \"insertedId\" : ObjectId(\"5c1b52afb00d4fb0d9ef58a7\")
}
> 
> 
> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
test     0.000GB
testoob  0.000GB
> 
> db
testoob
> 
> db.dropDatabase()
{ \"dropped\" : \"testoob\", \"ok\" : 1 }
>

集合

  • 创建集合
1. db.createCollection(name, options)
2. db.COLLECTION_NAME.insert({}) --> 当你插入一些文档时,MongoDB 会自动创建集合。
字段 类型 描述
capped 布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。
autoIndexId 布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size 数值 (可选)为固定集合指定一个最大值(以字节计)。
如果 capped 为 true,也需要指定该字段。
max 数值 (可选)指定固定集合中包含文档的最大数量。
  • 查看已有集合
show collections / show tales
  • 删除集合
db.COLLECTION_NAME.drop()

> 
> use test
switched to db test
> 
> show tables
> 
> show collections
> 
> db.createCollection(\"user01\")
{ \"ok\" : 1 }
> 
> show tables
user01
> 
> db.createCollection(\"user02\",{capped:true, autoIndexId: true, size: 6142800, max:10000})
{
    \"note\" : \"the autoIndexId option is deprecated and will be removed in a future release\",
    \"ok\" : 1
}
> 
> show tables
user01
user02
> 
> db.user01.drop()
true
> 
> db.user02.drop()
true
> 

文档

  • 插入文档(insert)
db.COLLECTION_NAME.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)

writeConcern :可选, 事务相关写入关注, 如果使用事务 不要使用这个字段, 请参阅 事务选项(读取关注/写入关注/读取首选项)

db.COLLECTION_NAME.insert(
   <document or array of documents>,
   {
     writeConcern: <document>,
     ordered: <boolean>
   }
)

ordered :

可选的。如果true,在数组中执行文档的有序插入,并且如果其中一个文档发生错误,MongoDB将返回而不处理数组中的其余文档。

如果false执行无序插入,并且如果其中一个文档发生错误,则继续处理阵列中的其余文档。

  • 插入文档(save)
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

writeConcern :可选, 事务相关写入关注, 如果使用事务 不要使用这个字段, 请参阅 事务选项(读取关注/写入关注/读取首选项)

区别: save() 方法如果不指定 _id 字段类似于 insert() 方法。如果指定 _id 字段,则会更新 匹配 该 _id 的数据。

> 
> db.users.insert({name:\"user001\", age:18})
WriteResult({ \"nInserted\" : 1 })
> 
> 
> db.users.find()
{ \"_id\" : ObjectId(\"5c1b610eb00d4fb0d9ef58ab\"), \"name\" : \"user001\", \"age\" : 18 }
> 
> db.users.save({\"_id\": 123114, \"name\":\"user001\", age:18})
WriteResult({ \"nMatched\" : 0, \"nUpserted\" : 1, \"nModified\" : 0, \"_id\" : 123114 })
> 
> db.users.find()
{ \"_id\" : ObjectId(\"5c1b610eb00d4fb0d9ef58ab\"), \"name\" : \"user001\", \"age\" : 18 }
{ \"_id\" : 123114, \"name\" : \"user001\", \"age\" : 18 }
>
> db.users.save({\"_id\": 123114, \"name\":\"user003\", age:18})
WriteResult({ \"nMatched\" : 1, \"nUpserted\" : 0, \"nModified\" : 1 })
> 
> db.users.find()
{ \"_id\" : ObjectId(\"5c1b610eb00d4fb0d9ef58ab\"), \"name\" : \"user001\", \"age\" : 18 }
{ \"_id\" : 123114, \"name\" : \"user003\", \"age\" : 18 }
>
> 
> db.users.insert({\"name\":\"user004\", \"name\":\"user005\"})
WriteResult({ \"nInserted\" : 1 })
> 
> db.users.find()
{ \"_id\" : ObjectId(\"5c1b610eb00d4fb0d9ef58ab\"), \"name\" : \"user001\", \"age\" : 18 }
{ \"_id\" : 123114, \"name\" : \"user003\", \"age\" : 18 }
{ \"_id\" : ObjectId(\"5c1b61d7b00d4fb0d9ef58ac\"), \"name\" : \"user005\" }
> 
>
> db.users.insert({\"name\":\"user006\",\"NAME\":\"user007\"})
WriteResult({ \"nInserted\" : 1 })
> 
> db.users.find()
{ \"_id\" : ObjectId(\"5c1b610eb00d4fb0d9ef58ab\"), \"name\" : \"user001\", \"age\" : 18 }
{ \"_id\" : 123114, \"name\" : \"user003\", \"age\" : 18 }
{ \"_id\" : ObjectId(\"5c1b61d7b00d4fb0d9ef58ac\"), \"name\" : \"user005\" }
{ \"_id\" : ObjectId(\"5c1b626db00d4fb0d9ef58ad\"), \"name\" : \"user006\", \"NAME\" : \"user007\" }
> 

注意:

  1. 同一文档中不能存在相同的 key, 存在相同的key后面的数据会把前面的数据覆盖掉
  2. 文档中键值区分大小写

  • 查询
db.collection.findOne(query, projection).pretty()
db.collection.find(query, projection).pretty()

query : 可选, 指定的查询条件

projection : 可选, 使用投影操作符返回制定的键, 当查询全部键值可以忽略 1: 返回 0: 忽略

pretty() : 以格式化的方式显示所有文档

db.users.findOne({name:\"user001\"},{name:1}) √
db.users.findOne({name:\"user001\"},{_id : 0}) √
db.users.find({name:\"user001\"},{name:1, age: 0}) × projection不能混合使用

查询条件

描述 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.users.find({\"name\":\"user001\"}).pretty() where name = \'user001\'
小于 {<key>:{$lt:<value>}} db.col.find({\"age\":{$lt:20}}).pretty() where age < 50
小于或等于 {<key>:{$lte:<value>}} db.users.find({\"age\":{$lte:20}}).pretty() where age <= 50
大于 {<key>:{$gt:<value>}} db.users.find({\"age\":{$gt:50}}).pretty() where age > 20
大于或等于 {<key>:{$gte:<value>}} db.users.find({\"age\":{$gte:50}}).pretty() where age >= 20
不等于 {<key>:{$ne:<value>}} db.users.find({\"age\":{$ne:50}}).pretty() where age != 20

AND 条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。类似于 RDBMS 中的 WHERE key1 = value1 AND key2 = value2

语法格式如下:

db.COLLECTION_NAME.find({key1:value1, key2:value2}).pretty()

OR 条件

MongoDB OR 条件语句使用了关键字 $or,类似于RDBMS 中的 WHEHRE key1 = value1 OR key2 = value2
语法格式如下:

db.COLLECTION_NAME.find({$or[{kay1:value1},{key2:value2}]}).pretty()
  • 删除

删除一个

db.collection.deleteOne(
   <filter>,
   {
      writeConcern: <document>,
      collation: <document>
   }
)

writeConcern :可选, 事务相关写入关注, 如果使用事务 不要使用这个字段, 请参阅 事务选项(读取关注/写入关注/读取首选项)

collation : 可选, 要用于操作的排序规则, 详情请参阅排序文档

collation: {
	locale: <string>,
 	caseLevel: <boolean>,
	caseFirst: <string>,
	strength: <int>,
	numericOrdering: <boolean>,
	alternate: <string>,
	maxVariable: <string>,
	backwards: <boolean>
}

删除多个

db.collection.deleteMany(
   <filter>,
   {
      writeConcern: <document>,
      collation: <document>
   }
)

删除一个或多个

db.collection.remove(
   <query>,
   <justOne>
)

justOne :<boolean> true : 只删除第一个 false :删除多个

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>,
     collation: <document>
   }
)

justOne :<boolean> true : 只删除第一个 false :删除多个

writeConcern :可选, 事务相关写入关注, 如果使用事务 不要使用这个字段, 请参阅 事务选项(读取关注/写入关注/读取首选项)

collation : 可选, 要用于操作的排序规则, 详情请参阅排序文档

  • 更新
db.collection.update(
	<query>,
	<update>,
	{
 		upsert: <boolean>,
 		multi: <boolean>,
 		writeConcern: <document>,
 		collation: <document>,
 		arrayFilters: [ <filterdocument1>, ... ]
	}
)

query: 查询条件

udpate: 更新字段 $set, $uset, $inc, 如果替换所有都不加

upsert: 可选,如果upsert是true且没有文档与查询条件匹配,则update()插入单个文档, 如果upsert是true且存在与查询条件匹配的文档,则update()执行更新。如果 upsert为true 时, 最好添加唯一索引

**multi **: 可选的,如果设置为true,则更新符合query 条件的多个文档。如果设置为false,则更新一个文档。默认值为false。有关其他信息,请参阅多参数。

writeConcern :可选, 事务相关写入关注, 如果使用事务 不要使用这个字段, 请参阅 事务选项(读取关注/写入关注/读取首选项)

collation : 可选, 要用于操作的排序规则, 详情请参阅排序文档

arrayFilters: 可选的,一组过滤器文档,用于确定要为阵列字段上的更新操作修改哪些数组元素。对文档内的列表进行筛选.

##更新元素匹配arrayFilters条件
db.students.insert([
   { \"_id\" : 1, \"grades\" : [ 95, 92, 90 ] },
   { \"_id\" : 2, \"grades\" : [ 98, 100, 102 ] },
   { \"_id\" : 3, \"grades\" : [ 95, 110, 100 ] }
])
---------------------------------------------------------
db.students.update(
   { grades: { $gte: 100 } },
   { $set: { \"grades.$[element]\" : 100 } },
   {
     multi: true,
     arrayFilters: [ { \"element\": { $gte: 100 } } ]
   }
)
---------------------------------------------------------
{ \"_id\" : 1, \"grades\" : [ 95, 92, 90 ] }
{ \"_id\" : 2, \"grades\" : [ 98, 100, 100 ] }
{ \"_id\" : 3, \"grades\" : [ 95, 100, 100 ] }

##更新文档数组的特定元素
{
   \"_id\" : 1,
   \"grades\" : [
      { \"grade\" : 80, \"mean\" : 75, \"std\" : 6 },
      { \"grade\" : 85, \"mean\" : 90, \"std\" : 4 },
      { \"grade\" : 85, \"mean\" : 85, \"std\" : 6 }
   ]
}
{
   \"_id\" : 2,
   \"grades\" : [
      { \"grade\" : 90, \"mean\" : 75, \"std\" : 6 },
      { \"grade\" : 87, \"mean\" : 90, \"std\" : 3 },
      { \"grade\" : 85, \"mean\" : 85, \"std\" : 4 }
   ]
}
-------------------------------------------------------
db.students2.update(
   { },
   { $set: { \"grades.$[elem].mean\" : 100 } },
   {
     multi: true,
     arrayFilters: [ { \"elem.grade\": { $gte: 85 } } ]
   }
)
--------------------------------------------------------
{
   \"_id\" : 1,
   \"grades\" : [
      { \"grade\" : 80, \"mean\" : 75, \"std\" : 6 },
      { \"grade\" : 85, \"mean\" : 100, \"std\" : 4 },
      { \"grade\" : 85, \"mean\" : 100, \"std\" : 6 }
   ]
}
{
   \"_id\" : 2,
   \"grades\" : [
      { \"grade\" : 90, \"mean\" : 100, \"std\" : 6 },
      { \"grade\" : 87, \"mean\" : 100, \"std\" : 3 },
      { \"grade\" : 85, \"mean\" : 100, \"std\" : 4 }
   ]
}
版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表