菜鸟的mongoDB学习---(二)MongoDB 数据库,对象,集合

数据库

一个mongodb中可以建立多个数据库。

MongoDB的默认数据库为"db",该数据库存储在data目录中。

在MongoDB中可以创建数据库,如果你想使用MongoDB,创建数据库不是必要的。

"show dbs" 命令可以显示所有数据的列表。

[email protected]:~$ mongo
MongoDB shell version: 2.0.4
connecting to: test
> show dbs
NewsDB	0.203125GB
local	(empty)
>

执行 "db" 命令可以显示当前数据库对象或集合。

[email protected]:~$ mongo
MongoDB shell version: 2.0.4
connecting to: test
> db
test
>

运行"use"命令,可以连接到一个指定的数据库。

[email protected]:~$ mongo
MongoDB shell version: 2.0.4
connecting to: test
> db
test
> use NewsDB
switched to db NewsDB
> db
NewsDB
>

数据库名称可以是任何字符,但是不能包含空字符串,点号(.),或者" "。

"system" 作为系统保留字符串不能作为数据库名。

数据库名不能包含 "$"。

文档

文档是mongodb中的最核心的概念,是其核心单元,我们可以将文档类比成关系型数据库中的每一行数据。

多个键及其关联的值有序的放置在一起就是文档。在mongodb中使用一种类json的bson存储数据。

bson数据可以理解为在json的基础上添加了一些json中没有的数据类型。

如果我们会json,那么bson我们就已经掌握了一半了,至于新添加的数据类型后面我会介绍。

文档例子如所示,这个是我利用爬虫从网易新闻上抓下来的信息,存储到数据库中。

{
	"_id" : ObjectId("557a46d86e530e0e770001e4"),
	"from_url" : "http://tech.163.com/",
	"news_body" : [
		"6月3日-北京,第七届云计算大会期间,北京云端时代公司题为“新桌面 新生态 新价值”的2015桌面云生态链大会在国家会议中心成功召开。",
		"大会现场,云端时代总经理蒋建平先生以实际案例向现场嘉宾剖析了当前桌面云行业面临的共性问题及挑战,以及如何通过应用场景的归类及标准化、场景需求组合的标准化,安装部署的标准化、交付工具的标准化,携手生态链合作伙伴以“桌面云”的“工业4.0”思路来共同应对行业共性难题,提升企业IT价值。",
		"会上,云端时代总经理蒋建平先生提出的构建桌面云生态链,实现应用场景标准化、生态集成(产品认证和优化标准化)、产品形态集成标准化、部署集成标准化、设备上线标准化、资源扩展标准化等提法不仅令现场听众耳目一新,深受启发,而且受到生态链伙伴的一致认同。",
		"中科曙光、360、H3C、爱数软件、吉大正元作为云端时代桌面云生态链核心战略伙伴均派代表做了重要演讲并参与了圆桌论坛的讨论。上图从左到右分别是:曙光信息 云计算产品事业部总经理 何牧君,360 云安全事业部副总经理 张晓兵,H3C 市场部、解决方案部部长 王东海,吉大正元 副总经理  朱明达,爱数软件 产品副总裁 吴米香",
		"此外,来自云端时代桌面云生态链系统的多家IT厂商在现场也就“软件国产化”、“产业互联网”、“工业4.0”等热点议题展开了热烈讨论。",
		"会议现场布置了20个产品体验台,集中展示云端时代集成了生态链厂商产品的统一管理门户产品以及全系列云端软硬件一体产品。参会者可以动手操作,亲自体验云端时代桌面云产品的主要功能和性能模块。在产品演示过程和用户亲身体验过程中,云端时代的桌面云产品以其精美的图形设计、高清视频、优化的存储和复杂外设支持等重负载应用方面的卓越性和领先性,得到了用户们的肯定。"
	],
	"news_from" : "网易科技报道",
	"news_thread" : "AR99BQAF00094P25",
	"news_time" : "2015-06-04 14:43:47",
	"news_title" : "2015云端时代桌面云生态链大会成功召开",
	"news_url" : "http://tech.163.com/15/0604/14/AR99BQAF00094P25.html"
}

通常,"object(对象)" 术语是指一个文件。

文件类似于一个RDBMS的记录。

我们可以对集合(collection)进行插入,更新和删除操作。

下表将帮助您更容易理解Mongo中的一些概念:

RDBMS MongoDB
Table(表) Collection(集合)
Column(栏) Key(键)
Value(值) Value(值)
Records / Rows(记录/列) Document / Object(文档/对象)

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

数据类型 描述
string(字符串) 可以是一个空字符串或者字符组合。
integer(整型) 整数。
boolean(布尔型) 逻辑值 True 或者 False。
double 双精度浮点型
null 不是0,也不是空。
array 数组:一系列值
object 对象型,程序中被使用的实体。可以是一个值,变量,函数,或者数据结构。
timestamp timestamp存储为64为的值,只运行一个mongod时可以确保是唯一的。前32位保存的是UTC时间,单位是秒,后32为是在这一秒内的计数值,从0开始,每新建一个MongoTimestamp对象就加一。
Internationalized Strings UTF-8 字符串。
Object IDs 在mongodb中的文档需要使用唯一的关键字_id来标识他们。几乎每一个mongodb文档都使用_id字段作为第一个属性(在系统集合和定容量集合(capped collection)中有一些例外)。_id值可以是任何类型,最常见的做法是使用ObjectId类型。

集合

集合就是一组文档的组合。如果将文档类比成数据库中的行,那么集合就可以类比成数据库的表。

在mongodb中的集合是无模式的,也就是说集合中存储的文档的结构可以是不同的,比如下面的两个文档可以同时存入到一个集合中:

 {"name":"jingdong"} {"Name":"jingdong","sex":"man"} 

合法的集合名

集合名称必须以字母或下划线开头。

集合名可以保护数字

集合名称不能使美元符"$","$"是系统保留字符。

集合的名字 最大不能超过128个字符 。

另外,"."号的使用在集合当中是允许的,它们被成为子集合(Subcollection);比如你有一个blog集合,你可以使用blog.title,blog.content或者blog.author来帮组你更好地组织集合。

如下实例:

 db.tutorials.php.findOne() 

capped collections

Capped collections 就是固定大小的collection。有点环形队列的意思。

它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。

Capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能 和标准的collection不同,你必须要显式的创建一个capped collection, 指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的。

要注意的是指定的存储大小包含了数据库的头信息。

db.createCollection("mycoll", {capped:true, size:100000}) 
  • 在capped collection中,你能添加新的对象。
  • 能进行更新,然而,对象不会增加存储空间。如果增加,更新就会失败 。
  • 数据库不允许进行删除。使用drop()方法删除collection所有的行。
  • 注意: 删除之后,你必须显式的重新创建这个collection。
  • 在32bit机器中,capped collection最大存储为1e9( 1X109)个字节。
时间: 2024-11-05 23:33:12

菜鸟的mongoDB学习---(二)MongoDB 数据库,对象,集合的相关文章

MongoDB学习(管理数据库和集合)

管理数据库 显示数据库列表 show dbs 切换到其他数据库 use <database_name> 创建数据库 MongoDB没有提供显式的创建数据库的MongoDB shell命令.数据库是在添加集合或用户时隐式地创建的. 可使用use database_name命令创建数据库.但只有添加了至少一个文档,才可真正创建完一个数据库. 删除数据库 在MongoDB shell 中删除数据库,必须先切换到该数据库,才可执行删除操作. 1 use database_name 2 db.dropD

MongoDB学习笔记~MongoDB实体中的值对象

回到目录 注意,这里说的值对象是指在MongoDB实体类中的,并不是DDD中的值对象,不过,两者也是联系,就是它是对类的补充,自己本身没有存在的价值,而在值对象中,也是不需要有主键Id的,这与DDD也是不谋而合的,也是可以理解的,因为它只是对主对象的一种补充说明,自己不存在任何意义,所以要主键也没什么用,呵呵. 看一个MongoDB的值对象contact public class Person { public Person() { Contact = new Test.Contact(); A

mongodb 基本的概念-数据库、集合、文档

mongodb中基本的概念是数据库.集合.文档. 下表将帮助您更容易理解Mongo中的一些概念: SQL术语/概念      解释/说明   MongoDB术语/概念 解释/说明 database 数据库 database 数据库 table  表 collection 集合 row                                          记录行                            document                           

Oracle学习笔记九 数据库对象

Oracle 数据库对象又称模式对象,数据库对象是逻辑结构的集合,最基本的数据库对象是表. 其他数据库对象包括: 同义词 同义词是现有对象的一个别名.它的作用有: 1.简化SQL语句 2.隐藏对象的名称和所有者(隐藏原始对象内容) 3.提供对对象的公共访问 同义词共有两种类型: 公有同义词可被所有的数据库用户访问. 私有同义词只能在其模式内访问,且不能与当前模式的对象同名. 创建或替换现有同义词 create or replace synonym emp_syn for scott.emp; 删

MongoDB学习(二)

常用语句: 创建数据库:use database_name 示例:use myfisrtmongoDB shell下提示:switched to db myfisrtmongoDB 表示成功 但此时用show dbs命令任然无法查看到新创建的数据库,需要插入第一条数据后,才可以查看. 删除数据库:db.dropDatabase() 该命令是删除当前的数据库 提示:{"dropped":"myfirstmongoDB","ok":1} 插入文档:d

MongoDB学习笔记~以匿名对象做为查询参数,方便查询子对象

对于MongoDB的封装还在继续,对于不断追求简单的编程还在继续,对于喜欢代码的那么感觉,还在继续... 当你的mongo数据表里有子对象时,尤其是列表对象时,使用官方的驱动很是不爽,要记得很多新的对象类型,麻烦,所以,将它进行封装,让GetModel支持匿名参数! 表结构可能是这样 希望查询的语句变成这样 看了上面的语句感觉挺酷吧,呵呵,下面看一下实现的代码,今天下午写的,呵呵! public IEnumerable<TEntity> GetModel<U>(U template

mongodb 学习二

基本操作 增删改查实一个数据库必备的操作,接下来我们就说说怎么在shell下进行增删改查. 我们另外打开一个"命令指示符"窗口(注意:之前的不能关闭),输入mongo打开MongoDB的shell,这个shell就是MongoDB的客户端 F:\mongodb\data\bin>mongo MongoDB shell version: 3.4.4 connecting to: test > 默认连接的数据库是"test" 增增加操作 我们来增加一个名为&

MongoDB学习笔记~数据模型属性为集合时应该为它初始化

回到目录 今天要说一下技术点,我们在设计mongodb的数据模型时,如果属性是数组或者集合类型,我们在模型初始化时,需要为它们初始化一下,否则在数据库里将会被存储为NULL,当被存储为NULL时,我们将无法进行组件的push,pull等操作. 之间在设计模型时没有注意这点,然后产生的问题就是,没有被集合赋值,在mongodb里将会存储为NULL 而在对数组元素进行push时,当然就出现了下面的异常,因为mongodb不知道它是一个数组对象,呵呵 当我们为模块的集合属性初始化这后,存储的数据结构就

MongoDB学习笔记——MongoDB 连接配置

MongoDB连接标准格式: mongodb://[username:[email protected]]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] 参数说明 Mongodb:// 必填的前缀,标识当前字符串为便准链接格式 username:[email protected] 可选项,给出用户名和密码后,在连接数据库服务器后,驱动都会尝试登陆这个数据库 host uri里唯一的必填项,数据库的连

MongoDB学习笔记~Update方法更新集合属性后的怪问题

回到目录 在对MongoDB进行封装后,对于Update更新对象里的集合属性时出现了一个现象,让人感到很恶心,人家更新前是个美丽的Array,但是更新之后集合对象变成了键值对,键是集合的类型名称,值是真实的数组值,哈哈,这个问题起初困扰了我很久,今天终于豁然开朗了,原来是Update方法的问题,呵呵! 看原来的值 看更新后的变质的值 再看看我们的Update方法 public Task UpdateAsync(TEntity item) { var query = new QueryDocume