文档

  • 键值对的一个有序集
  • 文档被表示为对象
  • 文档必须有一个 _id
{"greeting" : "Hello, world!"}`

  • 文档的键是字符串
  • 区分类型和大小写
  • 不能含有空字符(\0)
  • .$ 是保留字
  • 不能由重复的键
  • 键/值对是有顺序的

集合

  • 一组文档
  • 动态模式: 一个 集合里的文档可以是多样;

命名

  • 集合名不能是空字符串;
  • 不能包含空字符(\0);
  • 不能以system开头;
  • 不能包含保留字符$

子集合

  • 集合用.分隔不同命名空间的子集合

数据库

  • 多个集合可以组成数据库

命名

  • 不能是空字符串
  • 基本上只能使用ASCII中的字母和数字
  • 区分大小写,简单来将,应该都用小写
  • 最多64字节
  • 如果不创建数据库直接创建集合,会默认在test数据库中

保留数据库

  • admin: 这是一个root数据库,如果将一个用户添加到此数据库,将自动获得所有数据库的权限;一些特定服务器端命令也只能从admin数据库运行
  • local:这个数据库永远不可复制,一台服务器上的所有本地集合都可以存储在这个数据库中
  • configmongodb用于分片设置时,分片信息会存储在此数据库

启动

  • mongod在没有参数的情况下会使用默认数据目录:/data/db
  • 默认监听接口:27017

数据类型

  • null
  • 布尔值
  • 数值:默认64位浮点值;对于整数值,可使用NumberInt(表示4字节带符号整数),NumberLong(表示8字符带符号整数)
{"x": NumberInt("3")}
{"x": NumberLong("3")}
  • 字符串类型

  • 日期: {"x": new Date()}

  • 正则表达式:{"x":/foobar/i}

  • 数组

  • 内嵌文档: {"x":{"foo":"bar"}}

  • _id是一个12字节的ID,默认类型ObjectId :{"x":objectId()}

    • 如果插入文档时没有 "_id" 键,系统会自动创建一个;

    • 由 24 个十六进制数字组成的字符串;

    • ObjectId 的 12 字节按照如下方式生成:

  • 二进制数据:是一个任意字节的字符串,不能直接在sell中使用;是将非UTF-8字符保存到数据库的唯一方式

  • 代码

客户端

db 变量

  • 启动时 shell 会连到 MongoDB 服务器的 test 数据库, 并将数据库连接赋值给全局变量 db;
  • 这个变量是通过 shell 访问 MongoDB 的主要 入口点;
  • 查看 db 当前指向哪个数据库: db;

基本操作

  • 创建: db.posts.insert(post);
  • 查找: db.posts.find();
  • 更新: db.posts.update([限定条件], newpost);
  • 删除: db.posts.remove(限定条件);

连接

  • 启动shell时默认连接到test数据库;
  • 启动shell时指定机器名和端口,就可以连接到一台不同的机器: $ mongo some-host:30000/myDB;
  • 设置启动时不连接任何数据库: $ mongo --nodb; 之后可以再设置连接
 > conn = new Mongo("some-host:30000")
connection to some-host:30000
> db = conn.getDB("myDB")
myDB

js脚本

使用MongoDB shell执行js脚本;

  • 直接在命令行中传递脚本,运行后退出;
$ mongo script1.js script2.js script3.js
  • 可以指定的主机 / 端口上的mongod运行脚本,运行后退出;
$ mongo --quiet server-1:30000/foo script1.js script2.js script3.js
  • 可以在脚本中使用print()函数将内容输出到标准输出;
  • 也可以使用load()函数,从交互式 shell 中运行脚本,运行后不退出:
 > load("script1.js")
I am script1.js
>
  • 使用js脚本初始化/辅助mongodb设定

 // defineConnectTo.js
/**
* 连接到指定的数据库,并且将db指向这个连接 */
var connectTo = function(port, dbname) {
if (!port) {
port = 27017;
}
if (!dbname) {
dbname = "test";
}
db = connect("localhost:"+port+"/"+dbname);
return db; };

> load('defineConnectTo.js')

run方法

  • 查找当前目录 run("pwd");
  • 行命令行程序: run("ls", "-l", "/home/myUser/my-scripts/");
  • 通常来说,这种使用方式的局限性非常大,因为输出格式很奇怪,而且不支持管道。

.mongorc.js文件

  • 这个文件会在启动shell时自动运行;
  • 位置在用户主目录;
  • 启动时指定--norc参数,就可以禁止加载 ;

定制shell提示

  • 设置prompt变量:
//显示操作时间
prompt = function() {
return (new Date())+"> ";
}; //显示当前数据库
prompt = function() {
if (typeof db == 'undefined') {
return '(nodb)> ';
}
// 检查最后的数据库操作
try {
db.runCommand({getLastError:1});
} catch (e) {
print(e);
}
return db+"> ";
};

编辑复合变量

> EDITOR="/usr/bin/vim"
> var wap = db.books.findOne({title: "War and Peace"})
> edit wap

mongodb学习02基础知识的更多相关文章

  1. mongodb 学习笔记--- 基础知识

    1.mongodb的安装 (1) mac使用brew 安装就好 brew install mongodb (2) mkdir /data/db 作为mongodb默认的数据目录 并 sudo chow ...

  2. 基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用

    在花了不少时间研究学习了MongoDB数据库的相关知识,以及利用C#对MongoDB数据库的封装.测试应用后,决定花一些时间来总结一下最近的研究心得,把这个数据库的应用单独作为一个系列来介绍,希望从各 ...

  3. JavaScript学习02 基础语法

    JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...

  4. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  5. Ant学习-001-ant 基础知识及windows环境配置

    一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.T ...

  6. 学习javascript基础知识系列第二节 - this用法

    通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...

  7. 学习javascript基础知识系列第三节 - ()()用法

    总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...

  8. 关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph Learning (PGL))

    关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph Learning (PGL)) 欢迎fork本项目原始链接:关于图计算&图学习的基础知识概览:前置知识点学习 ...

  9. 学习Python3基础知识过程中总结

    print()中end==""的用法 例子:用Python3输出九九乘法表: for i in range(1,10): for j in range(1,i+1): s=i*j ...

随机推荐

  1. android ExpandableListView详解

    ExpandableListView是android中可以实现下拉list的一个控件,是一个垂直滚动的心事两个级别列表项手风琴试图,列表项是来自ExpandableListViewaAdapter,组 ...

  2. 【编程题目】有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序;(需要回头仔细研究)

    32.(数组.规划)有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序:要求:通过交换 a,b 中的元素,使[序列 a 元素的和]与[序列 b 元素的和]之间的差最小.例如: var a=[ ...

  3. HDU 4387 Stone Game (博弈)

    题目:传送门. 题意:长度为N的格子,Alice和Bob各占了最左边以及最右边K个格子,每回合每人可以选择一个棋子往对面最近的一个空格移动.最先不能移动的人获得胜利. 题解: k=1时 很容易看出,n ...

  4. bootstrap清除拟态框内添加新HTML再打开时会有缓存现象

    $(function(){ $("#editor").on("hidden.bs.modal",function(){ //清除缓存方法 $(this).fin ...

  5. TortoiseSVN中Branching和Merging实践

    转自:http://blog.csdn.net/eggcalm/article/details/6606520 使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及 ...

  6. wc(Word Count)

    .查看文件的字节数.字数.行数 wc test.txt --> 行数 单词数 字节数 文件名 .用来统计当前目录下的文件数(数量中包含当前目录) ls -l | wc -l -c 统计字节数. ...

  7. c语言强制类型转换

    一.强制类型转换 printf("3/2+100.5=%f",3/2+100.5);//100.5错误表达 printf ("    (float)3/(float)2 ...

  8. Lua程序设计入门

    在Lua中,一切都是变量,除了关键字.TTMD强大了. 1.注释 -- 表示注释一行 --[[ ]]表示注释一段代码,相当于C语言的/*....*/ 注意:[[ ... ]]表示一段字符串 2.lua ...

  9. 20145206邹京儒《Java程序设计》第一周学习总结

    20145206 <Java程序设计>第1周学习总结 教材学习内容总结 1.三大平台:Java SE.Java EE与Java ME.Java SE是各应用平台的基础,分为四个主要的部分: ...

  10. Mac OS

    defaults write com.apple.finder AppleShowAllFiles -bool true 此命令显示隐藏文件defaults write com.apple.finde ...