`

MongoDB官方教程整理笔记(摘录)

阅读更多

声明:内容均为摘录,仅包括简单功能,请以官网最新中文教程为准

 

平台以win32为例,内容均来自官网,略加整理。

参考:

http://wiki.mongodb.org/display/DOCS/Quickstart+Windows

http://www.mongodb.org/display/DOCS/Tutorial

中文文档:

http://wiki.mongodb.org/display/DOCS/Home

下面的Translations的“中文”链接

 

1. 下载预编译的二进制

选择32bit和64bit

建议使用64位版本的Windows运行64位版本的MongoDB。

http://wiki.mongodb.org/display/DOCS/Downloads

解压后可以把目录更名为mongo-xxxxxxx以表示区分

 

2. 创建数据目录

Windows下默认的数据目录保存在MongoDB二进制所在盘中。

例如在C:\下的mongo都会保存在C:\data\db,

不过它不会自动创建,必须手工创建

C:\> mkdir \data

C:\> mkdir \data\db

 

3. 运行MongoDB服务器

最重要的二进制文件是:数据库服务器mongod.exe和管理工具mongo.exe

假设在C:\my_mongo_dir\bin中,则执行以下命令启动服务器

C:\> cd \my_mongo_dir\bin

C:\my_mongo_dir\bin > mongod

如果要以服务的形式运行,则使用类似的命令行

mongod --bind_ip 127.0.0.1 --logpath d:\mongo\logs --logappend --dbpath d:\mongo\data --directoryperdb --install

其中

mongod --install

mongod --service

mongod --remove

mongod --reinstall

可以对服务执行添加和删除操作。

--serviceName {arg}

--serviceUser {arg}

--servicePassword {arg}

设置服务的相关信息

 

4. 用mongo.exe测试简单JavaScript语句

C:\> cd \my_mongo_dir\bin

C:\my_mongo_dir\bin> mongo

> // the mongo shell is a javascript shell connected to the db

> 3+3

6

> db

test

> // the first write will create the db:

> db.foo.insert( { a : 1 } )

> db.foo.find()

{ _id : ..., a : 1 }

mongo.exe的详细的用法可以参考mongo.exe --help

 

5. (可选)用VS编译MongoDB的windows版本。

详见

http://wiki.mongodb.org/display/DOCS/Building+for+Windows

 

6. SQL与MongoDB的对照表

MongoDB拥有与关系型数据库(例如MySQL)相似的查询能力,但查询语法不同。

http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

MongoDB的请求(包括索引键样式)以JSON (BSON)对象表达,

而且包含一个实际动词(如find)。

以下是SQL与Mongo请求语言语句的对照(可以运行于管理命令行mongo.exe)

(注:不一定等效,某些操作在不同的数据库有自己特有的规定,

例如MySQL,所以要格外小心)

(1) 创建

CREATE TABLE USERS (a Number, b Number)

(隐式,但也可以显式创建,例如一个封顶集合)

> # mongo shell

> db.createCollection("mycoll", {capped:true, size:100000})

> show collections

如果驱动支持,还可以

> db.runCommand( {createCollection:"mycoll", capped:true, size:100000} )

(2) 插入

INSERT INTO USERS VALUES(1,1)

> db.users.insert({a:1,b:1})

(3) 查询

SELECT a,b FROM users

> db.users.find({}, {a:1,b:1})

SELECT * FROM users

> db.users.find()

SELECT * FROM users WHERE age=33

> db.users.find({age:33})

SELECT a,b FROM users WHERE age=33

> db.users.find({age:33}, {a:1,b:1})

SELECT * FROM users WHERE age=33 ORDER BY name

> db.users.find({age:33}).sort({name:1})

SELECT * FROM users WHERE age>33

> db.users.find({'age':{$gt:33}})

> db.users.find({age:{$gt:33}})

SELECT * FROM users WHERE age<33

> db.users.find({'age':{$lt:33}})

> db.users.find({age:{$lt:33}})

SELECT * FROM users WHERE a=1 and b='q'

> db.users.find({a:1,b:'q'})

(4) 更新(20110311更新:包括删除?)

UPDATE users SET a=1 WHERE b='q'

> db.users.update({b:'q'}, {$set:{a:1}}, false, true)

(5) 索引

CREATE INDEX myindexname ON users(name)

> db.users.ensureIndex({name:1})

EXPLAIN SELECT * FROM users WHERE z=3

> db.users.find({z:3}).explain()

(6) 集合函数,排序和分页和其它查询

SELECT * FROM users ORDER BY name DESC

> db.users.find().sort({name:-1})

SELECT * FROM users LIMIT 10 SKIP 20

> db.users.find().limit(10).skip(20)

SELECT * FROM users LIMIT 1

> db.users.findOne()

SELECT DISTINCT last_name FROM users

> db.users.distinct('last_name')

SELECT COUNT(*y) FROM users

> db.users.count()

SELECT COUNT(*y) FROM users where AGE > 30

> db.users.find({age: {'$gt': 30}}).count()

SELECT COUNT(AGE) from users

> db.users.find({age: {'$exists': true}}).count()

更详细的用法见手册

http://www.mongodb.org/display/DOCS/Manual

 

7. 用mongo.exe管理数据库

双击运行mongo.exe

默认连接到localhost的test数据库

MongoDB shell version: 1.6.3

connecting to: test

>

切换数据库(可以是不存在的)

MongoDB不要求显式创建数据库的集,而是在插入数据时自动创建。

如果集合不存在,MongoDB会认为是空集合。

用use切换数据库不会立刻创建数据库,而是等到数据插入时才创建。

所以show dbs不会立刻显示该数据库

> use mydb

switched to db mydb

显示所有数据库

> show dbs

admin

local

test

查看帮助:

> help

        db.help()                    help on db methods

        db.mycoll.help()             help on collection methods

        rs.help()                    help on replica set methods

        help connect                 connecting to a db help

        help admin                   administrative help

        help misc                    misc things to know

 

        show dbs                     show database names

        show collections             show collections in current database

        show users                   show users in current database

        show profile                 show most recent system.profile entries wit

h time >= 1ms

        use <db_name>                set current database

        db.foo.find()                list objects in collection foo

        db.foo.find( { a : 1 } )     list objects in foo where a == 1

        it                           result of the last line evaluated; use to f

urther iterate

        exit                         quit the mongo shell

创建变量,赋值,保存到集合中,然后读出来。

隐含以下规则:

不需要创建集;

结构动态可变,而且允许异构的对象放在一起;

自动添加_id字段;

ObjectID值是唯一的。

> j = { name : "mongo" };

{"name" : "mongo"}

> t = { x : 3 };

{ "x" : 3  }

> db.things.save(j);

> db.things.save(t);

> db.things.find();

{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }

{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }

循环插入,显示时如果超过20条,显示前20条,可用it继续显示

find()返回游标对象

> for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i});

> db.things.find();

{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }

{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }

{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }

{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }

{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }

{ "_id" : ObjectId("4c220a42f3924d31102bd859"), "x" : 4, "j" : 4 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85a"), "x" : 4, "j" : 5 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85b"), "x" : 4, "j" : 6 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85c"), "x" : 4, "j" : 7 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85d"), "x" : 4, "j" : 8 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85e"), "x" : 4, "j" : 9 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85f"), "x" : 4, "j" : 10 }

{ "_id" : ObjectId("4c220a42f3924d31102bd860"), "x" : 4, "j" : 11 }

{ "_id" : ObjectId("4c220a42f3924d31102bd861"), "x" : 4, "j" : 12 }

{ "_id" : ObjectId("4c220a42f3924d31102bd862"), "x" : 4, "j" : 13 }

{ "_id" : ObjectId("4c220a42f3924d31102bd863"), "x" : 4, "j" : 14 }

{ "_id" : ObjectId("4c220a42f3924d31102bd864"), "x" : 4, "j" : 15 }

{ "_id" : ObjectId("4c220a42f3924d31102bd865"), "x" : 4, "j" : 16 }

{ "_id" : ObjectId("4c220a42f3924d31102bd866"), "x" : 4, "j" : 17 }

{ "_id" : ObjectId("4c220a42f3924d31102bd867"), "x" : 4, "j" : 18 }

has more

> it

{ "_id" : ObjectId("4c220a42f3924d31102bd868"), "x" : 4, "j" : 19 }

{ "_id" : ObjectId("4c220a42f3924d31102bd869"), "x" : 4, "j" : 20 }

可以显式保存游标变量,然后操作(用内置的tojson()可以美化文档)

> var cursor = db.things.find();

> while (cursor.hasNext()) printjson(cursor.next());

还可以使用forEach()执行循环(但需要定义一个专门的函数)

> db.things.find().forEach(printjson);

可以把游标当作数组使用。

此时所有数据的加载到内存,对于大的结果集可能会导致内存溢出。

所以尽量以迭代器形式使用

> var cursor = db.things.find();

> printjson(cursor[4]);

可以转换为数组(数组概念不适用于驱动,仅使用于交互界面)

> var arr = db.things.find().toArray();

> arr[5];

{ "_id" : ObjectId("4c220a42f3924d31102bd859"), "x" : 4, "j" : 4 }

由于MongoDB的游标是非快照的,

所以第一次和最后一次next()之间的操作可能影响也可能不影响查询结果。

此时需要使用锁住快照查询。

MongoDB具有与SQL相似的查询能力,

通常需要创建“查询文档”(即那个作为参数的大括号JSON对象)

例如:

SELECT * FROM things WHERE name="mongo"

> db.things.find({name:"mongo"}).forEach(printjson);

SELECT * FROM things WHERE x=4

> db.things.find({x:4}).forEach(printjson);

{ a:A, b:B, ... }的意思是

where a==A and b==B and ..."

参考http://www.mongodb.org/display/DOCS/Queries+and+Cursors

MongoDB还允许返回“部分文档”,方法是在find的第二个参数中指定文档的元素子集。

注意_id字段总是要返回

SELECT j FROM things WHERE x=4

> db.things.find({x:4}, {j:true}).forEach(printjson);

为方便处理游标,mongo和驱动提供findOne()查询文档。

和find()参数一样,但返回的不是游标,而是满足条件的第一个文档或者null。

这种方法高效,使数据库和客户端的工作减少,

> printjson(db.things.findOne({name:"mongo"}));

等效于find({name:"mongo"}).limit(1)

可以用limit()限制结果的大小。

好处和findOne()一样。

> db.things.find().limit(3);

如果想查询方法名,可以用help()

> db.help()

> db.whatever.help()

如果忽略参数表,则输出源代码

> printjson

function (x) {

    print(tojson(x));

}

由于mongo是完全的JavaScript外壳,所以支持任何JavaScript函数,语法和类。

另外还定义自己的类和全局变量(例如db),

API列表见

http://api.mongodb.org/js/

 

 

 

-------------------------------------------

20110311更新:

 

更多见豆瓣

http://www.douban.com/group/mongodb/

 

因为本人是MySQL爱好者&菜鸟,所以暂时不够级别研究这个,

官网有完整的中文翻译文档,还提供快速参考卡片

http://www.10gen.com/reference

点进去按“Skip Form”跳过即可下载,

不过现在貌似没有中文版。

 

(怨念:为什么用JavaScript不用Lua的说~)

 

--------------------------------------------

 

20110312更新:

中文pdf见

http://www.10gen.com/conferences/mongobeijing2011

下面会议日程安排里的Slides链接

 

---------------------------------------------

20110317更新:

更改一个失效的链接

 

 

 

分享到:
评论

相关推荐

    MongoDB 入门教程笔记

    MongoDB 入门教程笔记

    linux安装mongodb教程

    Linux 安装 MongoDB 教程 Linux 安装 MongoDB 教程是指在 Redhat Linux 4 系统下安装 MongoDB 32 位版本的详细步骤指导。MongoDB 是一个文件数据库,其他 Linux 系统下安装也是类似的。 知识点 1:下载 MongoDB ...

    MongoDB教程基础入门

    教程名称:MongoDB教程基础入门 课程目录:【】MongoDB教程基础入门-代码【】MongoDB教程基础入门01第一讲上【】MongoDB教程基础入门02第一讲下【】MongoDB教程基础入门03第二讲上【】MongoDB教程基础入门04第二讲...

    从浅入深学习MongoDB视频教程全集

    教程名称:从浅入深学习 MongoDB视频教程全集 课程目录:【】MongoDB视频教程-00_MongoDB代码【】MongoDB视频教程01_第一讲_上【】MongoDB视频教程02_第一讲_下【】MongoDB视频教程03_第二讲_上【】MongoDB视频教程...

    mongodb入门教程笔记

    MongoDB是一个分布式文件存储的数据库,由C++语言编写,专门针对Web应用提供高性能的数据存储解决方案。作为非关系型数据库(NoSQL)的一种,MongoDB结合了关系数据库和非关系数据库的优点,尤其适合处理大量复杂、...

    《mongodb入门》读书笔记

    ### MongoDB入门知识点详解 #### MongoDB概述 MongoDB是一款开源、高性能、无模式的文档型数据库系统,被广泛应用于Web应用及大数据处理等场景。它采用了BSON(Binary JSON)格式来存储数据,使得数据存储更加灵活...

    MongoDB基础教程笔记 dept.json

    MongoDB练习文件

    MongoDB基础教程笔记 emp.json

    MongoDB练习文件

    MongoDB基础教程

    本基础教程将带你了解MongoDB的核心概念和基本操作,包括安装、数据模型、 CRUD操作、索引、复制集以及Java驱动的使用。 首先,MongoDB的基础知识包括其NoSQL的数据模型。不同于传统的关系型数据库,MongoDB使用...

    MONGOdb视频教程地址.txt

    真实有效的mongodb视频教程地址 深入浅出 MongoDB 高清IT教程视频下载 1.1、-nosql与MongoDB.mp4 1.2、-MongoDB安装配置.mp4 1.3、-MongoDB?shell详.mp4 1.4、-MongoDB文档、集合、数据库的概念.mp4 1.5、-...

    MongoDB最详细学习笔记.txt

    MongoDB最详细学习笔记

    mongoDB基础教程

    mongoDB 的基础教程,mongoDB的数据库创建删除,以及集合的增删改查,索引等

    Mongodb视频-燕十八 mongodb视频教程全集21讲+mongodb高级实战开发视频教程

    根据提供的文件信息,我们可以推断出这是一套关于MongoDB的视频教程,由燕十八主讲,包含了21讲的基础教程以及高级实战开发教程。接下来,我们将基于这些信息来生成相关的知识点。 ### MongoDB简介 MongoDB是一种...

    mongoDB的官方中文文档

    MongoDB的官方中文文档是学习和掌握MongoDB的重要资源,尤其对于中文用户来说,可以更直观地理解其特性和操作方法。 首先,让我们深入了解一下MongoDB的基础知识: 1. **数据模型**:MongoDB的数据模型基于JSON...

    MongoDB学习教程.MongoDB数据库教程

    MongoDB数据库教程.zip

    华为云mongodb安装教程.txt

    华为云安装monggodb教程,支持aarach64的linux,arm内存.

    30+个视频+mongodb视屏教程2

    30+个视频+mongodb视屏教程2-----------独立完整的资源

    辛星笔记之MongoDB教程

    MongoDB是一种流行的NoSQL文档型数据库,它与其他传统的关系型数据库不同,不使用固定的表格形式来存储数据,而是使用了更为灵活的数据存储方式。MongoDB的核心特性包括面向集合的存储方式、模式自由的设计、以及...

    MongoDB入门教程

    这个电子书为MongoDB入门教程,它主要适合初学者,以原理为主,由浅入深的讲述知识点

    MongoDB培训教程.rar

    MongoDB培训教程.rar

Global site tag (gtag.js) - Google Analytics