MongoDB 入门操作手册

image

这次不废话了,直接上干货。

img

linux 环境搭建

MongoDB 官方提供了各种 linux 的发行版本,强烈建议你去官方下载,不要从乱七八糟的渠道下载乱七八糟的安装包。

下载地址:https://www.mongodb.com/download-center#community

安装过程(基于 Ubuntu - 16.04 - 64位)

curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz  # 下载
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz                                 # 解压
mv  mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb                       # 将解压包拷贝到指定目录
export PATH=/usr/local/mongodb/bin:$PATH                                 # 添加到 PATH 路径

创建数据库目录

数据库目录在安装过程中不会自动创建,需要你手动找一个你觉得合适的地方创建 data 目录。

sudo mkdir -p /data/db               # 我选择创建在根目录下

划重点/data/db 是 MongoDB 默认的启动的数据库路径。

如果你觉得放在根目录下不爽,可以通过 --dbpath 来指定。

mongod --dbpath <其他目录>             # <其他目录> 替换成你觉得爽的数据目录

MongoDB后台管理 Shell

输入命令 mongo

当你进入 mongoDB 后台后,它默认会链接到 test 数据库。

# mongo
MongoDB shell version: 2.6.10
connecting to: test
> 

基本概念

文档

文档是 MongoDB 中数据的基本单元,理解起来很简单,就是一组数据有序的放在一起就是文档。

例如:

单键值文档 {"userName":"WuJiaYi"}

多键值文档 {"_id" : ObjectId("58097dfe7e6d64baca4847365"), "name" : "WuJiaYi", "add" : "China" }

集合

多个文档放在一起就是集合。

数据库

多个集合放在一起就是数据库。

关系如下图所示:

image

shell 部分命令表

show dbs 显示所有数据库。

> show dbs      # 新创建的数据库不会显示。需要写入一些数据,才会显示。
admin  (empty)
local  0.078GB
test   0.078GB
> 

db 显示当前数据库。

> db 
test
> 

use 切换 或 创建数据库。

> use local     # 如果数据库不存在,则创建数据库,否则切换到指定数据库。
switched to db local
> db
local
> 

db.dropDatabase() 删除数据库。

> use test             # 切换到 test 数据库
switched to db test
> db.dropDatabase()     # 删除当前的数据库
{ "dropped" : "test", "ok" : 1 }
> show dbs              # test 数据库被删除了
admin  (empty)
local  0.078GB
> 

db.createCollection("NAME") 创建集合。

> db.createCollection("test")
{ "ok" : 1 }
>

show collections 显示当前数据库的集合。

> show collections
system.indexes
wujiayi
wweeww
> 

db.NAME.drop() 删除集合。

> show collections    # 显示所有集合
system.indexes
wujiayi
wweeww
> db.wujiayi.drop()   # 删除 wujiayi 这个集合
true
> show collections    # wujiayi 集合已经被删除了 
system.indexes
wweeww
> 

db.COL_NAME.insert(DOC) 插入文档。

>db.col.insert({title: 'MongoDB 手册',
    name: '吴佳轶',
    url: 'http://www.wujiayi.vip',
    add: 'Beijing',
})

db.COL_NAME.update(DOC) 更新文档。

>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})  # col是集合的名字

db.COL_NAME.remove(DOC,NUMBER) 删除文档。

>db.col.remove({'title':'MongoDB'},1)     # 查找符合 title 为 MongoDB 的文档,删除一条。
WriteResult({ "nRemoved" : 1 })           # 删除了两条数据

db.COL_NAME.find().pretty() 查询所有文档。

> db.col.find().pretty()   # 格式化查询所有文档
> db.col.findOne()         # 查询一条数据
> db.col.find()            # 非格式化查询

Node.js 连接 MongoDB

创建数据库

如果数据库不存在则创建。

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/WuJiaYi";
 
MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  console.log("数据库已创建!");
  db.close();
});

创建合集

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/WuJiaYi';
MongoClient.connect(url, function (err, db) {
    if (err) throw err;
    console.log('数据库已创建');
    var dbase = db.db("WuJiaYi");
    dbase.createCollection('data', function (err, res) {
        if (err) throw err;
        console.log("创建集合!");
        db.close();
    });
});

插入数据

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("WuJiaYi");
    var myobj = { name: "吴佳轶", url: "www.wujiayi.vip" };
    dbo.collection("data").insertOne(myobj, function(err, res) {
        if (err) throw err;
        console.log("文档插入成功");
        db.close();
    });
});

插入多条数据

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("WuJiaYi");
    var myobj =  [
        { name: '吴佳轶', url: 'http://www.wujiayi.vip', type: 'cn'},
        { name: '魔法世界', url: 'http://www.magicworld.vip', type: 'ch'},
        { name: '魔法学校', url: 'http://www.magicshool.vip', type: 'ch'}
       ];
    dbo.collection("data").insertMany(myobj, function(err, res) {
        if (err) throw err;
        console.log("插入的文档数量为: " + res.insertedCount);
        db.close();
    });
});

查询数据

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("WuJiaYi");
    dbo.collection("data"). find({}).toArray(function(err, result) { // 返回集合中所有数据
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

查询指定条件的数据

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("WuJiaYi");
     var whereStr = {"name":'吴佳轶'};  // 查询条件
    dbo.collection("data").find(whereStr).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

更新数据

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("WuJiaYi");
    var whereStr = {"name":'吴佳轶'};  // 查询条件
    var updateStr = {$set: { "url" : "http://wujiayi.vip" }};
    dbo.collection("data").updateOne(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log("文档更新成功");
        db.close();
    });
});

更新多条数据

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("WuJiaYi");
    var whereStr = {"type":'ch'};  // 查询条件
    var updateStr = {$set: { "url" : "http://www.magicworld.vip" }};
    dbo.collection("data").updateMany(whereStr, updateStr, function(err, res) {
        if (err) throw err;
         console.log(res.result.nModified + " 条文档被更新");
        db.close();
    });
});

删除数据

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("WuJiaYi");
    var whereStr = {"name":'吴佳轶'};  // 查询条件
    dbo.collection("data").deleteOne(whereStr, function(err, obj) {
        if (err) throw err;
        console.log("文档删除成功");
        db.close();
    });
});

删除多条数据

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("WuJiaYi");
    var whereStr = { type: "en" };  // 查询条件
    dbo.collection("data").deleteMany(whereStr, function(err, obj) {
        if (err) throw err;
        console.log(obj.result.n + " 条文档被删除");
        db.close();
    });
});

广告时间:

微信公众号:吴佳轶同学。

未完待续... ...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容