当前位置: 首页 > news >正文

MongoDB文档操作

3.3 文档操作
3.1 文档介绍

文档的数据结构和 JSON 基本一样。

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

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

文档是一组键值(key-value)对(即 BSON),一个简单的文档例子如下:

{"id":1,"name":"goudan", "address":"beijing"}
3.2 MongoDB 数据类型

下表为MongoDB中常用的几种数据类型。

数据类型描述
String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean布尔值。用于存储布尔值(真/假)。
Double双精度浮点值。用于存储浮点值。
Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array用于将数组或列表或多个值存储为一个键。
Timestamp时间戳。记录文档修改或添加的具体时间。
Object用于内嵌文档。
Null用于创建空值。
Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID对象 ID。用于创建文档的 ID。
Binary Data二进制数据。用于存储二进制数据。
Code代码类型。用于在文档中存储 JavaScript 代码。
Regular expression正则表达式类型。用于存储正则表达式。

ObjectId

ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:

  • 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时

  • 接下来的 3 个字节是机器标识码

  • 紧接的两个字节由进程 id 组成 PID

  • 最后三个字节是随机数

MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象

由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间:

> var newObject = ObjectId()
> newObject.getTimestamp()
ISODate("2022-05-10T10:17:55Z")

ObjectId 转为字符串

> newObject.str
62a46bd34c256eb2b320f207
3.3 插入文档

MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)
或
db.collection.insertOne() 和 db.collection.insertMany()   #3.2 版本之后新增
或
db.COLLECTION_NAME.save(document)
  • save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne()db.collection.replaceOne() 来代替。

  • insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。

db.collection.insertMany() 用于向集合插入一个新文档,语法格式如下:

db.collection.insertMany([ <document 1> , <document 2>, ... ],   -- insertOne()时这儿就一个文档,不需要数组即可{writeConcern: <document>,ordered: <boolean>}
)

参数说明:

  • document:要写入的文档。

  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。

  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

写入案例

-- myTable中添加1个文档
> db.myTable.insert({"id":1,"name":"goudan", "address":"beijing"})
WriteResult({ "nInserted" : 1 })
​
-- myTable中添加1个文档
> db.myTable.insertOne({"id":2,"name":"mz", "address":"beijing"})
{"acknowledged" : true,"insertedId" : ObjectId("62a46e194c256eb2b320f209")
}
​
-- myTable中添加2个文档
> db.myTable.insertMany([{"id":3,"name":"shanjige", "address":"beijing"},{"id":4,"name":"haonan", "address":"jianshazui"}])
{"acknowledged" : true,"insertedIds" : [ObjectId("62a46e644c256eb2b320f20a"),ObjectId("62a46e644c256eb2b320f20b")]
}
​
-- myTable中添加1个文档
> db.myTable.save({"id":5,"name":"renzha", "address":"tangshan"})
WriteResult({ "nInserted" : 1 })
​
> db.myTable.find()
{ "_id" : ObjectId("62a46dee4c256eb2b320f208"), "id" : 1, "name" : "goudan", "address" : "beijing" }
{ "_id" : ObjectId("62a46e194c256eb2b320f209"), "id" : 2, "name" : "mz", "address" : "beijing" }
{ "_id" : ObjectId("62a46e644c256eb2b320f20a"), "id" : 3, "name" : "shanjige", "address" : "beijing" }
{ "_id" : ObjectId("62a46e644c256eb2b320f20b"), "id" : 4, "name" : "haonan", "address" : "jianshazui" }
{ "_id" : ObjectId("62a46eae4c256eb2b320f20c"), "id" : 5, "name" : "renzha", "address" : "tangshan" }

Guff_hys_python数据结构,大数据开发学习,python实训项目-CSDN博客

http://www.lryc.cn/news/268106.html

相关文章:

  • 解决谷歌浏览器下CSS设置字体小于12px无效办法,关于如何在chrome里实现小于12px的文字。
  • springboot(ssm智慧校园之家长子系统 智慧校园系统Java系统
  • RM3100 stm32驱动(硬件i2c)
  • 视觉学习(7) —— 接收数据和发送数据以及全局变量和浮点数
  • leetcode 1576. 替换所有的问号(easy)(优质解法)
  • Advanced IP Scanner - 网络扫描器
  • 搜索百度百科官方创建入口,怎么创建更新公司的百度百科词条呢?
  • 大数据与人工智能|全面数字化战略与企业数字化转型(第1节 )
  • 【四】【C语言\动态规划】地下城游戏、按摩师、打家劫舍 II,三道题目深度解析
  • 【大数据存储与处理】开卷考试总复习笔记
  • HTML 实操试题(一)
  • 创龙瑞芯微RK3568设备树1(修改设备树GPIO和串口)
  • R语言【dplyr】——filter保留符合筛选条件的行,以数据的行为单位,创建子集
  • 几种串口扩展电路
  • 实战10 角色管理
  • Lua的底层原理与C#交互原理浅析【更新中】
  • 鸿蒙项目二—— 注册和登录
  • Dijkstra(迪杰斯特拉)算法总结
  • 设计模式?!
  • Pytorch项目,肺癌检测项目之三
  • 深圳鼎信|输电线路防山火视频监控预警装置:森林火灾来袭,安全不留白!
  • 【Bash/Shell】知识总结
  • 单例模式(C++实现)
  • ElasticSearch 聚合统计
  • SpringIOC之MethodBasedEvaluationContext
  • 【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手
  • 钦丰科技(安徽)股份有限公司携卫生级阀门管件盛装亮相2024发酵展
  • Python模拟动态星空
  • 最新技术整理3款开源免费直播推流工具,实现实时视频推流、视频拉流,目标端可以是服务器、云平台、移动设备等(附源码)
  • shell ——数组