MongoDB 常用的数据类型和基本操作

NO.1 MongoDB的常用数据类型

MongoDB中的文档类似json,我们知道,在json中,最常用的数据类型有null、bool、数组、字符串、数据、json对象等等。相对比较少,比如对于时间类型的数据,json是无法表示的,而MongoDB中对json进行了简单的优化,像json,但是又不是json。下面我们慢慢说

MongoDB的常用数据类型和MySQL比较像,你可以对比着看。它的常用数据类型有:

1、null

用于表示空值或者不存在的字段

{"x":null}

2、bool

这个容易理解,true or false

{"x":true}

3、整数

在MongoDB自带的shell中不可用,shell中的需要使用函数来表示整数,如下:

{"x":NumberInt("3")}

如果我们写成

{"x":3}

这里的3会被表示成double。

4、字符串

最常用的数据类型

{"x":"string"}

5、对象id

对象id是12字节的唯一ID

{"x":ObjectId()}

在MongoDB的数据记录里面,也就是文档里面,必须有一个_id键,这个_id键你可以简单理解为唯一标识,类似MySQL中的自增主键,但是它一般不设置成自增的,因为在分布式环境中,同步自动增加主键值既费时又费力,MongoDB为了保证分布式场景下的性能,通过自身生成方式来产生_id,_id的类型,称之为ObjectId类型。

该类型使用12字节的存储空间,每个字节里面是2位16进制的数字,是一个24位的字符串。这12个字节的生成方式如下:

0、1、2、3位是时间戳,提供秒级别唯一性

4、5、6位是机器的唯一标识符,提供机器级别唯一性

7、8位是当前生成ObjectId的进程标识符,保证不同进程的唯一性

9、10、11位是一个计数器,保证同一秒相同进程产生的ObjectId的唯一性。

6、日期类型

日期类型存储的是从标准纪元开始的毫秒数,不存储时区。

{"x":new Data()}

示例如下:

> db.num.insert({"age": new Date()})
WriteResult({ "nInserted" : 1 })
> db.num.find()
{ "_id" : ObjectId("5f96b5e15e5c5ff982b9c6af"), "age" : 28 }
{ "_id" : ObjectId("5f9835d0f24f04e23fb63878"), "age" : 3 }
{ "_id" : ObjectId("5f983621f24f04e23fb63879"), "age" : 3 }
{ "_id" : ObjectId("5f9838d2f24f04e23fb6387a"), "age" : ISODate("2020-10-27T15:12:18.739Z") }

7、数组

值的集合或者列表可以表示成数组

{"x":["a","b","c"]}

8、内嵌文档

文档可以包含别的文档

{"x":{"foo":"bar"}}

9、代码

文档中可以包含JavaScript代码

{"x":function(){/*-----*/}}

NO.2 集合文档的基本操作

这块儿可能是比较关键的部分了,在MySQL中,增删改查是最最基础的功能,在MongoDB中,这些技能也是必备的。

集合相关操作

1、查询集合

查看当前数据库下面的集合,可以使用show collections命令。

2、创建集合

在MongoDB中,不需要单独创建集合,一般情况下,只要我们直接将文档插入到集合中,就可以看到集合自动生成了,举个例子:

> show collections # 查看集合
num
person

> db.aaa.insert({"name":"yeyz"})
WriteResult({ "nInserted" : 1 })

> show collections #查看集合,发现aaa这个集合生成了
aaa
num
person

3、删除集合

> show collections
aaa
num
person
>
> db.aaa.drop() #删除集合
true
> show collections
num
person

关于集合,最常见的操作就是上面几个。查询集合、创建集合、删除集合。

再来看文档相关的操作:

1、插入文档

上面的例子中,我们使用insert操作已经演示了插入文档的方法。我把两种常见的方法写在一起:

方法一:直接插入文档
> db.aaa.insert({"name":"yeyz"})
WriteResult({ "nInserted" : 1 })

方法二:将文档保存在变量里面,插入变量
> record={"name":"zhangsan"}
{ "name" : "zhangsan" }
> db.aaa.insert(record)
WriteResult({ "nInserted" : 1 })

查找集合所有内容
> db.aaa.find()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }
{ "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }

2、查询文档

查询文档的方法比较多,展开来说可以说很久,就像我们的SQL语法一样,有各种各样的写法,这里先说下最简单的,查找所有对象、查找一条对象,或者查找某一条对象的方法。看例子:

#查找所有记录
> db.aaa.find()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }
{ "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }
>
>
#查找一条记录
> db.aaa.findOne()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }

#带过滤条件的,查找name=zhangsan的记录
> db.aaa.find({"name":"zhangsan"})
{ "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }

3、删除记录

删除记录的方法也比较简单,如下:

#查找所有记录
> db.aaa.find()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }
{ "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }

#删除name=zhangsan的记录
> db.aaa.remove({"name":"zhangsan"})
WriteResult({ "nRemoved" : 1 })
> db.aaa.find()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }

# 仅剩name=yeyz的一条记录
> db.aaa.find()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }

如果不想要过滤条件,可以直接使用:

db.aaa.remove()来删除所有的记录。

4、更新记录

更新记录,在MongoDB中有些麻烦,例如下面的场景

#查找所有记录
> db.aaa.find()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }
{ "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" }

#用一个变量表示要修改的文档
> record={"name" : "yeyz","age":18}
{ "name" : "yeyz", "age" : 18 }

#用刚才的变量替换匹配条件的结果
> db.aaa.update({"name" : "yeyz"},record)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.aaa.find()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz", "age" : 18 }
{ "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" }

# 修改变量的age属性
> record.age=20
20

#再次替换原来的文档
> db.aaa.update({"name" : "yeyz"},record)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.aaa.find()
{ "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz", "age" : 20 }
{ "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" }

上面的方法在条件唯一匹配的时候不会有问题,但是在条件不唯一匹配的场景下,可能存在一些隐患,下次我们再分享,今天就先这么点儿吧。

每天的内容不多,慢慢来,一点一点搞懂它。。。晚安喽。

以上就是MongoDB 常用的数据类型和基本操作的详细内容,更多关于MongoDB 数据类型和基本操作的资料请关注我们其它相关文章!

(0)

相关推荐

  • MongoDB的基本操作实例详解【服务端启动,客户端连接,CRUD操作】

    本文实例讲述了MongoDB的基本操作.分享给大家供大家参考,具体如下: 本文内容: MongoDB的介绍 MongoDB服务端的启动 MongoDB客户端连接 SQL与MongoDB相关概念解释 什么是BSON 数据库操作 集合操作 文档操作 测试环境:win10 软件版本:3.6.2 首发时间:2018-03-18 15:38 MongoDB的介绍: MongoDB 是由C++语言编写的开源数据库系统. MongoDB 将数据存储为一个文档.MongoDB是一个基于分布式文件存储的数据库.

  • Mongodb基本操作与Python连接mongodb并进行基础操作的方法

    mongodb是基于分布式文件存储的nosql(非关系型)数据库 虽说是nosqldb, but mongodb 其中的文档可以是关系型的 在mongodb中, 表为集合, 里面的数据为文档; 文档本质就是一条调JSON数据 进入mongodb: mongo 退出mongodb: exit 库操作 显示库: show dbs 选择或者创建: use llsdb # 不管该库是否存在,都会use进入, 如何该库不存在, use进去不存入数据退出时,该库 不会被创建. 所以创建库就use再写入数据.

  • Android编程连接MongoDB及增删改查等基本操作示例

    本文实例讲述了Android编程连接MongoDB及增删改查等基本操作.分享给大家供大家参考,具体如下: MongoDB简介 Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式.Mongo使用C++开发. Mongo安装参考 1)下载安装包文件,解压到某一文件夹下. 官方下载地址:htt

  • 基于MongoDB数据库的数据类型和$type操作符详解

    前面的话 本文将详细介绍MongoDB数据库的数据类型和$type操作符 类型 数字 备注 Double 1 双精度浮点数 - 此类型用于存储浮点值 String 2 字符串 - 这是用于存储数据的最常用的数据类型.MongoDB中的字符串必须为UTF-8 Object 3 对象 - 此数据类型用于嵌入式文档 Array 4 数组 - 此类型用于将数组或列表或多个值存储到一个键中 Binary data 5 二进制数据 - 此数据类型用于存储二进制数据 Undefined 6 已废弃 Objec

  • MongoDB支持的java数据类型和测试例子

    mongodb的java数据类型有: Object Ids 自动IDRegular Expressions 正则表达式搜索记录Dates/Times 时间Database References 数据基础结构Binary Data 二进制流Timestamp Data 时间标记戳Code Data 代码数据Embedded Documents 嵌入式文档Arrays 数组类型 详细参考原来英文 http://docs.mongodb.org/ecosystem/drivers/java-types

  • MongoDB中对文档的增删查改基本操作方法总结

    插入文档:insert() 方法 要插入数据到 MongoDB 集合,需要使用 MongoDB 的  insert() 或 save() 方法. 语法: insert() 命令的基本语法如下: >db.COLLECTION_NAME.insert(document) 例子:  >db.mycol.insert({    _id: ObjectId(7df78ad8902c),    title: 'MongoDB Overview',     description: 'MongoDB is

  • Mongodb 利用mongoshell进行数据类型转换的实现方法

    $type操作符 检测类型 种类 代号 别名 Double 1 "double" String 2 "string" Object 3 "object" Array 4 "array" Binary data 5 "binData" Undefined 6 "undefined" Deprecated. ObjectId 7 "objectId" Boolean 8

  • mongodb 数据类型(null/字符串/数字/日期/内嵌文档/数组等)

    MongoDB的文档类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null.布尔.数字.字符串.数组及对象). JSON的数据类型的局限性: 1.无日期类型,对日期型的处理较为繁琐 2.无法区分浮点数和整数.32位和64位 3.其他类型表示局限 如函数.正则式等 Mongodb使用BSON(Binary JSON)来组织数据,BSON还提供日期.32位数字.64位数字等类型.下面为在mongodb shell中这些类型在文档中是如何表示: 1.null  用于表示空

  • Mongodb 数据类型及Mongoose常用CURD

    前言 看完了Node.js实战,其中在数据存储部分提到了Redis.Mongodb,我自己也根据书中的介绍写了几个简单的demo,在demo的过程首先遇到的问题就是数据类型和常见的CURD写法. mongodb的常见操作有两种方式,一个是直接使用API,也就相当于你在SQL Server客户端中使用T-SQL编写SQL语句来操作数据一样,其次就是在程序中使用mongoose驱动来操作数据,相当于我们在程序里用ADO.NET或EF来操作数据,如果你已经写了几个调用API的demo,那么我建议再回过

  • MongoDB使用指南--基本操作

    读取 db.collection.find() db.users.find( { age: {$gt: 18}}, {name: 1, address: 1} ).limit(5).sort({age:1}) users是collection名字,从users中查找; age是query criteria,筛选结果,代表查找name字段的值比18大的; name是projection,筛选列(1代表存在, 0代表不存在),代表返回结果中包含name,address,_id(默认包含字段)字段的值

  • Linux系统下MongoDB的简单安装与基本操作

    Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备受当前IT从业人员的青睐.Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象.Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作. 一.下载mongodb 前往mongodb官网下载页面:https://www.mongodb.org/downloads下载

  • MongoDB数据库安装配置、基本操作实例详解

    本文实例讲述了MongoDB数据库安装配置.基本操作.分享给大家供大家参考,具体如下: 1.简介 NO SQL:NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",是对不同于传统的关系数据库管理系统(RDBMS)的统称.NoSQL用于超大规模数据的存储,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展. RDBMS NOSQL - 高度组织化结构化数据 - 结构化查询语言(SQL) - 数据和关系都存储在单独的表中. - 数据操纵语言,数据定

  • Python中的MongoDB基本操作:连接、查询实例

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案.它的特点是高性能.易部署.易使用,存储数据非常方便. MongoDB 简单使用 联接数据库 复制代码 代码如下: In [1]: import pymongo In [2]: from pymongo import Connection In [3]: connection = Connection('192.168.1.3', 27017) //创建联接 Connection

随机推荐