资讯专栏INFORMATION COLUMN

mongodb基础知识-mongodb权威指南

kyanag / 1501人阅读

摘要:命名集合名称不能是空字符串集合名称不能包含集合名称不能以开头,这是系统集合保留的前缀不能包含保留字符子集合组织集合的一种管理是使用分隔不同命名空间的子集合,例如博客功能的两个集合和。命名不能为空字符串不能包含特殊字符。

1. 文档

文档是mongodb的核心概念。就是键值对的一个有序集,其他语言中hash、map、dictionary。
文档的键的要求:

键不能包含(空字符),代表着键结束

.和$有特殊意义,是被保留的,不能使用。

mongodb不但区分类型,还区分大小写。
文档不能有重复的键。
文档中的键/值是有序的:{“x”:1,“y”:2}和{“y”:2,“x”:1}是不同的。通常,字段顺序不重要,某些情况下会非常重要。

2. 集合

集合就是一组文档,相当于关系型数据库中的一张表。
集合是动态模式的,集合里面可以放任何文档,类型甚至键集合之间都可以不同。

命名

集合名称不能是空字符串

集合名称不能包含

集合名称不能以system.开头,这是系统集合保留的前缀

不能包含保留字符"$"

子集合

组织集合的一种管理是使用“.”分隔不同命名空间的子集合,例如博客功能的两个集合:blog.posts和blog.authors。

3.数据库

多个文档组成数据库。一个mongodb的实例可以承载多个数据库。每个数据库有独立的权限,不同的数据库也放置在不同的文件夹中。

命名

不能为空字符串

不能包含特殊字符。基本上只能使用ASCII中的字母和数字

区分大小写,应全部小写。

最多为64个字节

保留的库名

admin:这是root数据库,将一个用户添加到admin数据库中,这个用户将获得所有数据库的权限

local:这个数据库不可以复制,一台服务器中的本地集合都可以存储在这个数据库中

config:分片信息存储在config数据库中

数据库名添加到集合名前,得到集合的完全限定名,即命名空间(namespace)。例如cms数据库中的blog.posts。则命名空间为cms.blog.posts。命名空间不得超过121字节。

4.启动
mongod
bin/mongod --fork --config /usr/local/mongodb-3.2.6/etc/mongod.conf 

mongod没有参数的情况下,会使用默认的数据目录/data/db,如果目录不存在或者不可写,会启动失败。
启动时候默认监听27017端口。还会启动一个http服务器,监听数字比主端口号大1000,即28017。2.6以后的mongo都是关闭的,启动的时候加入--httpinterface开启。这里有详细的解释

5.shell
mongo
bin/mongo --host 192.168.253.XXX --port 27000
mongo 192.168.253.XXX:27000/myDB

shell是个功能完备的JavaScript解释器,可以运行任意JavaScript程序。
默认连接的是test数据库。

不连接数据库:

mongo --nodb

需要连接的数据之后:

conn=new Mongo("192.168.253.XXX:27000)
db=conn.getDB("myDB")
db

查看当前链接的数据库

5.1 help
help 

查看帮助文档,db.help()查看数据库级别的帮助,db.foo.help()查看集合级别的帮助。
如果想知道一个函数做什么用的,可以直接在shell中输入函数名,例如:db.foo.update

5.2 使用shell执行脚本
mongo script1.js script2.js

mongo会依次执行,执行完成之后然后退出。

如果你想在指定的主机跟端口上执行:

mongo --quiet server:27000/myDB script1.js

这样mongo将指向server:27000上的myDB数据库执行脚本。需要注意的是,指定的命令行需要在server之前。--quiet选项,可以不让mongo打印欢迎标志

load("script1.js")
load("/data/kyle/script1.js")

在交互式shell中运行脚本。load函数无法解析~字符。

5.3 .mongorc.js文件
某些脚本会被频繁加载,可以在用户的主目录下(cd ~)创建mongorc.js文件,并将脚本加入其中。
.mongorc.js常见的用途是移除比较危险的函数:、
var no = function(){
    print("Not on my watch");
}
db.dropDatabase=DB.prototype.dropDatabase=no;

可以在启动的时候加入选项--norc,禁止加载.mongorc.js

5.4 定制shell
将prompt变量设为一个字符串或者函数,就可以重写默认的shell提示。
prompt=function(){
    return (new Date())+"> ";
}
prompt=function(){
    if(typeof db=="undefined"){
        return "(nodb)> ";
    }
    try{
        db.runCommand({getLastError:1})
    }catch(e){
        print(e)
    }
    return db+"> ";
}
5.5 集合命名的注意事项

如果集合名称中包含保留字或者无效的js属性名称,那么db.collectionName将不能正常 工作。

db.version:返回当前数据库的名称

如果你有一个version的集合,那么你需要用getCollection函数。

db.getCollection("version")

一个访问数组的方法:

var collections=["A","B","C"]
for(var i in collections){
    print(db.blog[i]])
}

不能使用db.blog.i
一些诡异的名字的集合也可以这样访问
var name = "@#lala"
db[name].find();
直接使用db.@#lala进行查询是非法的

6.数据类型

null

布尔型:true,false

数值,默认使用的是64位浮点类型

字符串

日期:新纪元以来的毫秒数。创建的时候使用new Date(),而非Date()

正则

数组

内嵌文档

对象id:一个12字节的唯一标示

二进制

代码:可以包含js代码。

mongo的文档必须有一个"_id"的键,这个键的值可以使任何类型的,默认是一个ObjectId对象。
一个集合里面,每个文档的都有唯一的"_id"。

ObjectId

分布式数据库,能在分片环境中生成唯一标识符非常重要。
ObjectId的12个字节按照下面的方式排列。

前四个字节是从标准纪元开始的时间戳,单位为秒

由于时间戳在前,这意味着ObjectId大致会按照插入的顺序排列

4-6,是所在主机的唯一标示,通常是机器名的散列

pid为了确保同一台机器并发的多个进程产生的ObjectId的唯一性

最后三个字节是一个自动增加的计数器

 2. _id

如果插入文档的时候没有“_id”键,系统会自动创建,这个通常是由客户端的驱动程序完成的

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18975.html

相关文章

  • MongoDB权威指南读书笔记(一)

    摘要:如果没有找到找到符合条件的文档,就会以这个条件和更新文档为基础新建一个新的文档。使用它可以快速方便的对文档进行更新。更新多个文档默认情况下,文档的更新只针对第一个匹配到的文档,多个条件符合时,其它文档不会改变。 what is MongoDB ? 面向文档的数据库 不再有行的概念,不再有预定义模式 易于拓展 丰富的功能 索引 聚合 特殊的集合类型 文件存储 高性能 可以一个示...

    Barrior 评论0 收藏0
  • MongoDB权威指南读书笔记(一)

    摘要:如果没有找到找到符合条件的文档,就会以这个条件和更新文档为基础新建一个新的文档。使用它可以快速方便的对文档进行更新。更新多个文档默认情况下,文档的更新只针对第一个匹配到的文档,多个条件符合时,其它文档不会改变。 what is MongoDB ? 面向文档的数据库 不再有行的概念,不再有预定义模式 易于拓展 丰富的功能 索引 聚合 特殊的集合类型 文件存储 高性能 可以一个示...

    sixleaves 评论0 收藏0
  • mongoDB初阶系列三:mongoose

    摘要:前言上篇初阶系列二中的增删改查中讲解了用驱动来对数据进行增删改查,本篇将继续前进,依旧通过增删改查来讲解如何用更顺畅的操控。查下面这段代码对集合进行搜索,并输出每项任务的唯一和描述,等打印完成后,关闭数据库连接。 前言 上篇 mongoDB初阶系列二:node中的增删改查 中讲解了用node驱动来对数据进行增删改查,本篇将继续前进,依旧通过增删改查来讲解如何用mongoose更顺畅的操...

    Null 评论0 收藏0
  • mongoDB初阶系列三:mongoose

    摘要:前言上篇初阶系列二中的增删改查中讲解了用驱动来对数据进行增删改查,本篇将继续前进,依旧通过增删改查来讲解如何用更顺畅的操控。查下面这段代码对集合进行搜索,并输出每项任务的唯一和描述,等打印完成后,关闭数据库连接。 前言 上篇 mongoDB初阶系列二:node中的增删改查 中讲解了用node驱动来对数据进行增删改查,本篇将继续前进,依旧通过增删改查来讲解如何用mongoose更顺畅的操...

    yzzz 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<