mongo db

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB 数据类型ObjectIdObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时接下来的 3 个字节是机器标识码紧接的两个字节由进程 id 组成 PID最后三个字节是随机数MongoDB 中存储的文档必须有一个 _id 键。

MongoDB 数据类型

image

ObjectId

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

  • 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时
  • 接下来的 3 个字节是机器标识码
  • 紧接的两个字节由进程 id 组成 PID
  • 最后三个字节是随机数
    image

MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象
由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间:

> var newObject = ObjectId()
> newObject.getTimestamp()
ISODate("2017-11-25T07:21:10Z")

查询

基本的条件符

db.getCollection('nodes').find({"createTime":ISODate("2019-05-03T21:06:37.000Z")}).pretty()
db.getCollection('nodes').find({"createTime":{$gt:ISODate("2019-05-03T21:06:37.000Z")}}).pretty()

$lt:<
$lte:<=
$gt:>
$gte:>=
$ne:!=

and,or

db.col.find({"likes": {$gt:50}, $or: [{"ipv4Addr":{$gt:'172.16.134.255'},{"ipv4Addr":{$lt:'172.16.134.1'}]}).pretty()
db.getCollection('nodes').find({ $and:[{"ipv4Addr":{$gt:'172.16.134.1'}},{"ipv4Addr":{$lt:'172.16.134.90'}}] }).collation({"locale": "zh", numericOrdering:true}).pretty().count()
db.getCollection('nodes').find({ $and:[{"ipv4Addr":{$gt:'172.16.134.1'}},{"ipv4Addr":{$lt:'172.16.134.90'}}] }).collation({"locale": "zh", numericOrdering:true}).sort({"ipv4Addr":1}).pretty().count()

子文档查询

db.getCollection('nodes').find({"labels.macVendor.value":/ASUSTek COMPUTER INC./} ).count()

正则

db.getCollection('nodes').find({"labels.macVendor.value":/ASUSTek COMPUTER INC./} ).count()

分页: .skip(10).limit(10)

db.getCollection('nodes').find({"labels.macVendor.value":/ASUSTek COMPUTER INC./} ).skip(10).limit(10)

MongoDB 更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。

update

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

如:

db.col.update({'title':'11111'},{$set:{'title':'22222'}},{multi:true})

save

save() 方法通过传入的文档来替换已有文档。语法格式如下:

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

参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。
相关文章
|
Java 编译器 C语言
【JavaSE】运算符详解及与C语言中的区别
【JavaSE】运算符详解及与C语言中的区别
220 0
|
11月前
|
机器学习/深度学习 编解码 人工智能
InvSR:开源图像超分辨率生成模型,提升分辨率,修复老旧照片为超清图像
InvSR 是一个创新的图像超分辨率模型,基于扩散模型的逆过程恢复高分辨率图像。它通过深度噪声预测器和灵活的采样机制,能够高效地提升图像分辨率,适用于老旧照片修复、视频监控、医疗成像等多个领域。
2159 9
InvSR:开源图像超分辨率生成模型,提升分辨率,修复老旧照片为超清图像
|
11月前
|
Java 物联网 程序员
还在纠结抽象类和接口?看这篇就够了!
本文从一位程序员的角度出发,讲述了其小学弟在Java开发面试中遇到的难题——抽象类与接口的区别。文章不仅详细解析了两者的定义、特点及主要差异,还提供了实际开发中的应用场景和面试答题技巧,帮助读者更好地理解和应用这一重要知识点。
1628 12
|
Java 开发者 UED
“Java开发者必看:异步编程实战解析,掌握这些技巧,让你的代码跑得更快!
【8月更文挑战第30天】随着互联网技术的发展,系统性能和用户体验成为关注焦点。异步编程作为提高应用响应速度和吞吐量的技术,在Java中广泛采用。本文详细介绍了Java异步编程的概念与优势,并通过实战示例展示了如何利用Future、Callable及CompletableFuture在实际项目中实施异步编程,帮助开发者更好地理解和应用这一技术。
200 2
|
XML 数据格式
XPath解析(一)
XPath解析(一)
166 10
|
移动开发 小程序 视频直播
FFmpeg开发笔记(二十七)解决APP无法访问ZLMediaKit的直播链接问题
本文讲述了在使用ZLMediaKit进行视频直播时,遇到移动端通过ExoPlayer和微信小程序播放HLS直播地址失败的问题。错误源于ZLMediaKit对HTTP地址的Cookie校验导致401无权限响应。通过修改ZLMediaKit源码,注释掉相关鉴权代码并重新编译安装,解决了此问题,使得ExoPlayer和小程序能成功播放HLS视频。详细解决方案及FFmpeg集成可参考《FFmpeg开发实战:从零基础到短视频上线》一书。
774 3
FFmpeg开发笔记(二十七)解决APP无法访问ZLMediaKit的直播链接问题
|
安全 网络安全 数据库
扫描神器:Nessus 保姆级教程(附步骤)
扫描神器:Nessus 保姆级教程(附破解步骤)
|
IDE 前端开发 搜索推荐
5款超好用的在线IDE,媲美vscode,可以直接编写前端构建化项目,而无需在本地下载依赖包,非常适合学习、demo、原型开发
5款超好用的在线IDE,媲美vscode,可以直接编写前端构建化项目,而无需在本地下载依赖包,非常适合学习、demo、原型开发
6390 0
|
Linux 虚拟化 开发者
Docker(1)
Docker定义 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
177 0