设为首页 加入收藏

TOP

MongoDB入门下(一)
2014-11-24 03:05:25 来源: 作者: 【 】 浏览:2
Tags:MongoDB 门下

MongoDB入门下
相关链接:
MongoDB入门上
http://www.2cto.com/database/201207/142914.html
1.使用shell的技巧
shell内置的帮助:
www.2cto.com

使用db.help()可以查看 数据库级别的命令帮助,集合的相关帮助可以通过db.blog.help()
输入的时候不要输入括号,这样就可以显示该函数的java script源代码:

使用db.集合名 的方式来访问集合一般不会有问题,但如果集合名恰好是数据库类的一个属性,这样会有问题,例如:
要访问version这个集合,使用db.version是不行的,因为db.version是个数据库函数.
当java script只有在db中找不到指定的属性时,才会将其作为集合返回.当有属性与目标集合同名时,可以使用
getCollection函数,如:db.getCollection("version")
要查看名称中含有无效的java script字符的集合,如:db.blog-refactor是个有效的集合名,但在java script中就变成了
变量相减.通过db.getCollection("blog-refactor")可以得到blog-refactor集合.
在java script中,x.y和x['y']是等价的.
var collections={"posts","comments","authors"};
for(i in collections) www.2cto.com
{
  doStuff(db.blog[collections[i]])
}
而不是写成这样:
doStuff(db.blog.posts)
doStuff(db.blog.comments)
doStuff(db.blog.authors)
2.数据类型
基本的数据类型
MongoDB的文档类似于JSON.在概念上与java script中的对象相似.
MongoDB在保留JSON基本的键值对特性的基础上,添加了其他一些数据类型.
1.null
表示空值或者不存在的字段
{"x":null}
2.布尔值
true或false
{"x":false}
3.32位整数
shell中这个类型不适用,因为java script只支持64位浮点数,所以32位整数会被自动转换
4.64位整数
shell中这个类型不适用,shell会使用一个特殊的内嵌文档来显示64位整数
5.64位浮点数
shell中的数字都是这种类型,下面都是浮点数
{"x":3.14} www.2cto.com
{"x":3}
6.字符串
utf-8字符串都可表示为字符串类型的数据
{"x":"Refactor"}
7.符号
shell中这个类型不适用.shell将数据库里的符号类型转换成字符串
8.对象id
对象id是文档的12字节的唯一ID
{"x":ObjectId()}
9.日期
日期类型存储的是从标准纪元开始的毫秒数.不存储时区
{"x":new Date()}
10.正则表达式
文档中可以包含正则表达式,采用java script语法
{"x":/refactor/i}
11.代码
文档中可以包含java script代码
{"x":function(){....}}
12.二进制数据
二进制数据由任意字节的串组成,shell中不能用
13.最大值 www.2cto.com
BSON包含的特殊类型,表示可能的最大值,shell中不能用
14.最小值
BSON包含的特殊类型,表示可能的最小值,shell中不能用
15.未定义
文档中可以使用未定义类型
{"x":undefined}
16.数组
值的集合或列表可以表示成数组
{"x":["a","b","c"]}
17.内嵌文档
文档中可以包含别的文档,也可以作为值嵌入到父文档中
{"x":{"hello":"world"}}
数字类型
java script中只有一个"数字"类型.MongoDB中有3种数字类型(32位整数,64位整数,64位浮点数),
shell必须绕过java script的限制.默认情况下,shell中的数字都被MongoDB当成双精度数.这就意味着
如果你从数据库中获得的是一个32位整数,修改文档后,将文档存回到数据库的时候,这个整数就被转换成了
浮点数,即便是保持这个整数不修改,也会转换为浮点数.所以不应该子啊shell下覆盖整个文档.
数字只能表示为双精度数(64位浮点数)的另外一个问题是:有些64位整数并不能表示为64为浮点数,所以要存入
一个64位整数,在shell中查看,它会表示为一个内嵌文档,表示可能不准确.
www.2cto.com
日期类型
在java script中,Date对象用作MongoDB的日期类型,创建一个新的Date对象,通常会调用new Date(),而不是 Date()
调用构造函数(不包括new)实际会返回对日期的字符串表示,而不是真正的Date对象,这是java script本身的特性.
shell中的日期显示时使用本地时区设置.但是,日期在数据中是从标准纪元开始的毫秒数的形式存储的,没有与之相关的时区信息
数组类型
数组是一组值,既可以作为有序对象(如:列表,栈或队列)来操作,也可以作为无序对象(如:集合)操作.
如:{"things":["pie",3.14]}
诉诸数组可以包含不同数据类型的元素(这个例子中是一个字符串和一个浮点数),实际上,常规键值对支持的值都可以
作为数组的元素,甚至是嵌套的数组
MongoDB可以查询所有"things"数组中还有3.14的文档,要是经常使用这个查询,可以对"things"创建索引,来提高性能
MongoDB可以使用原子更新修改数组中的内容,比如深入数组内部将pie改为pi.
内嵌文档类型
内嵌文档就是把整个MongoDB文档作为另一个文档中键的一个值.这样数据可以组织的更自然,不用非得存成扁平结构.
如:应一个文档来表示一个人,同时还要保存他的地址,可以将地址内嵌到文档中
peopleAddress=
{ www.2cto.com
  "name":"Refactor",
  "address":
  {
    "street":"wuzhong",
    "city":"suzhou"
  }
}
同数组一样,MongoDB能够理解内嵌文档的结构,并能深入其中 构建索引,执行查询或更新.
内嵌文档可以改变处理数据的方式,在关系型数据库中,之前的文档一般会拆分成两个表("people"和"address")
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇对于安装SQL2008出现的错误:规则.. 下一篇在查询结果中添加自增列的两种方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)