mongodb学习02基础知识

文档

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

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

集合

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

命名

  • 集合名不能是空字符串;
  • 不能包含空字符();
  • 不能以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
原文地址:https://www.cnblogs.com/jinkspeng/p/4504156.html