前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

MongoDB

作者头像
用户7962184
发布2022-05-13 20:04:44
2K0
发布2022-05-13 20:04:44
举报
文章被收录于专栏:没事多喝水没事多喝水

mongodb官方文档总结

  • MongoDB是非关系型数据库。
  • BASE是NoSQL数据库通常对可用性及一致性的弱要求原则:
    • Basically Availble --基本可用
    • Soft-state --软状态/柔性事务。 "Soft state" 可以理解为"无连接"的, 而 "Hard state" 是"面向连接"的
    • Eventual Consistency --最终一致性 最终一致性, 也是是 ACID 的最终目的。

概念对照

SQL术语/概念

MongoDB术语/概念

解释/说明

database

database

数据库

table

collection

数据库表/集合

row

document

数据记录行/文档

column

field

数据字段/域

index

index

索引

table joins

表连接,MongoDB不支持

primary key

primary key

主键,MongoDB自动将_id字段设置为主键

这些定义看起来有点像是es中的定义。

  • 文档中的键值对是有序的。
  • 文档中的键是字符串。
  • 集合是mongoDb的 文档组,就像是table。但是没有固定的格式,任意格式和类型的数据都可以插入。
  • Capped collections 就是固定大小的collection。它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。

数据类型

数据类型

描述

String

字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。

Integer

整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。

Boolean

布尔值。用于存储布尔值(真/假)。

Double

双精度浮点值。用于存储浮点值。

Min/Max keys

将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。

Arrays

用于将数组或列表或多个值存储为一个键。

Timestamp

时间戳。记录文档修改或添加的具体时间。

Object

用于内嵌文档。

Null

用于创建空值。

Symbol

符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。

Date

日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。

Object ID

对象 ID。用于创建文档的 ID。

Binary Data

二进制数据。用于存储二进制数据。

Code

代码类型。用于在文档中存储 JavaScript 代码。

Regular expression

正则表达式类型。用于存储正则表达式。

  • 在一个集合里面,每个文档都有唯一的"_id"值,来确保集合里面每个文档都能被唯一标识。考虑到多个服务器,所以并不是使用自增的方式。用newObjectId = ObjectId() 生成
  • MongoDB支持全文检索,(不过全文检索这方面还是es靠谱)
  • MongoDB支持正则表达式查询。
  • 固定集合插入速度,按照插入顺序查询极快,并且能自动删除老数据。

基本命令

代码语言:javascript
复制
use DATABASE_NAME  

创建数据库,如果已有,进入该数据库进行操作

代码语言:javascript
复制
db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})  

创建固定集合

代码语言:javascript
复制
show dbs 

展示所有数据库,但是没有数据的数据库将不会展示

代码语言:javascript
复制
db.dropDatabase()

删除当前数据库

代码语言:javascript
复制
db.collection.drop() 

删除当前数据库的集合

代码语言:javascript
复制
db.COLLECTION_NAME.insert(document)  
eg:db.col.insert({title: 'MongoDB 教程',
    description: 'MongoDB 是一个 Nosql 数据库',
    by: 'MongoDB中文网', 
    url: 'http://www.mongodb.org.cn', 
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100  
})
还可以将数据定义成变量之后插入数据:
document=({title: 'MongoDB 教程',
    description: 'MongoDB 是一个 Nosql 数据库', 
    by: 'Mongodb中文网',    
    url: 'http://www.mongodb.org.cn', 
    tags: ['mongodb', 'database', 'NoSQL'],  
    likes: 100  
});  
db.col.insert(document)

往一个集合里面添加数据。

代码语言:javascript
复制
db.collection.update(    
    <query>, 
    <update>, 
    {       
        upsert: <boolean>,   
        multi: <boolean>,  
        writeConcern: <document>
    }
)
eg:db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })   # 输出信息  

修改数据

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如,inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别
代码语言:javascript
复制
db.collection.save(    
    <document>,     
    {      
        writeConcern: <document> 
    }  
)  
eg:db.col.save({    
    "_id" : ObjectId("56064f89ade2f21f36b03136"),   
    "title" : "MongoDB",  
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "MongoDB中文网",   
    "url" : "http://www.mongodb.org.cn",     
    "tags" : [           
        "mongodb",       
        "NoSQL"    
    ],    
    "likes" : 110
    }
)//替换了_id 为 56064f89ade2f21f36b03136 的文档数据

传入的文档来替换已有的数据

代码语言:javascript
复制
db.collection.remove(     
    <query>,     
    {       
        justOne: <boolean>,
        writeConcern: <document> 
    } 
) 
eg:db.col.remove({'title':'MongoDB 教程'}) 
db.col.remove({})  //删除所有数据

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  • writeConcern :(可选)抛出异常的级别。
代码语言:javascript
复制
db.COLLECTION_NAME.find()//全部
db.col.find().pretty()  // 易读方式
db.col.findOne()//只查一个

Where

操作

格式

范例

RDBMS中的类似语句

等于

{:}

db.col.find({"by":"菜鸟教程"}).pretty()

where by = '菜鸟教程'

小于

{:{$lt:}}

db.col.find({"likes":{$lt:50}}).pretty()

where likes < 50

小于或等于

{:{$lte:}}

db.col.find({"likes":{$lte:50}}).pretty()

where likes <= 50

大于

{:{$gt:}}

db.col.find({"likes":{$gt:50}}).pretty()

where likes > 50

大于或等于

{:{$gte:}}

db.col.find({"likes":{$gte:50}}).pretty()

where likes >= 50

不等于

{:{$ne:}}

db.col.find({"likes":{$ne:50}}).pretty()

where likes != 50

eg:db.col.find({likes : {

gt : 100}})

代码语言:javascript
复制
db.col.find({key1:value1, key2:value2}).pretty()  

and查询

代码语言:javascript
复制
db.col.find(     {        $or: [         {key1: value1}, {key2:value2}        ]     }  ).pretty() 
eg:db.col.find({"likes": {$gt:50}, $or: [{"by": "Mongodb中文网"},{"title": "MongoDB 教程"}]}).pretty() //and,or联合使用

or查询

Type

利用type可查询某一文档中的某一数据为特定的数据类型:

代码语言:javascript
复制
db.col.find({"title" : {$type : 2}})

limit和skip

代码语言:javascript
复制
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)  

查询前几条,跳过前几条,类似于limit ?,?

sort

代码语言:javascript
复制
db.COLLECTION_NAME.find().sort({KEY:1})   
eg:db.col.find({},{"title":1,_id:0}).sort({"likes":-1})  //按照like倒序排序

使用 1 和 -1 来指定排序的方式

索引

MongoDB使用 ensureIndex() 方法来创建索引。

代码语言:javascript
复制
db.COLLECTION_NAME.ensureIndex({KEY:1}) 
eg:db.col.ensureIndex({"title":1})//创建title升序索引
db.col.ensureIndex({"title":1,"description":-1})//复合索引
 db.values.ensureIndex({open: 1, close: 1}, {background: true})  //后台创建索引

可选参数:

Parameter

Type

Description

background

Boolean

建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。

unique

Boolean

建立的索引是否唯一。指定为true创建唯一索引。默认值为false.

name

string

索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。

dropDups

Boolean

在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.

sparse

Boolean

对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.

expireAfterSeconds

integer

指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。

v

index version

索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。

weights

document

索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。

default_language

string

对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语

language_override

string

对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

索引是存储在内存中的,由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。

如果索引的大小大于内存的限制,MongoDB会删除一些索引,这将导致性能下降。

索引不能被以下的查询使用:

  • 正则表达式及非操作符,如

not, 等。

  • 算术运算符,如 $mod, 等。
  • $where 子句

所以,检测你的语句是否使用索引是一个好的习惯,可以用explain来查看。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mongodb官方文档总结
    • 基本命令
      • Where
        • Type
          • limit和skip
            • sort
              • 索引
              相关产品与服务
              云数据库 MongoDB
              腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档