原文参见: http://www.mongodb.org/display/DOCS/Tutorial 启动数据库 下载 MongoDB, 解压后并启动: $ bin/mongod MongoDB 默认存储数据目录为 /data/db/ (或者 c:\data\db), 当然你也可以修改成不同目录, 只需要指定 –dbpath 参数: $ bin/mongod --dbpath /path/to/my/data/dir 获取数据库连接 现在我们就可以使用自带的shell工具来操作数据库了. (我们也可以使用各种编程语言的驱动来使用MongoDB, 自带的shell工具可以方便我们管理数据库) 启动 MongoDB JavaScript 工具: $ bin/mongo 默认 shell 连接的是本机localhost 上面的 test库, 会看到: MongoDB shell version: 0.9.8 url: test connecting to: test type "help" for help “connecting to:” 这个会显示你正在使用的数据库的名称. 想换数据库的话可以: use mydb 可以输入 help 来查看所有的命令. 插入数据到集合 下面我们来建立一个test的集合并写入一些数据. 建立两个对象, j 和 t , 并保存到集合中去. 在例子里 ‘ ’ 来表示是 shell 输入提示 j = { name : "mongo" }; {"name" : "mongo"} t = { x : 3 }; { "x" : 3 } db.things.save(j); db.things.save(t); db.things.find(); {"name" : "mongo" , "_id" : ObjectId("497cf60751712cf7758fbdbb")} {"x" : 3 , "_id" : ObjectId("497cf61651712cf7758fbdbc")} 有几点需要注意下 : 不需要预先建立一个集合. 在第一次插入数据时候会自动建立. 在例子其实可以存储任何结构的数据, 当然在实际应用我们存储的还是相同元素的集合. 这个特性其实可以在应用里很灵活, 你不需要类似alter table 来修改你的数据结构 每次插入数据时候对象都会有一个ID, 名字叫 _id. 当你运行不同的例子, 你的对象ID值都是不同的. 下面再加点数据: for( var i = 1; i 10; i++ ) db.things.save( { x:4, j:i } ); db.things.find(); {"name" : "mongo" , "_id" : ObjectId("497cf60751712cf7758fbdbb")} {"x" : 3 , "_id" : ObjectId("497cf61651712cf7758fbdbc")} {"x" : 4 , "j" : 1 , "_id" : ObjectId("497cf87151712cf7758fbdbd")} {"x" : 4 , "j" : 2 , "_id" : ObjectId("497cf87151712cf7758fbdbe")} {"x" : 4 , "j" : 3 , "_id" : ObjectId("497cf87151712cf7758fbdbf")} {"x" : 4 , "j" : 4 , "_id" : ObjectId("497cf87151712cf7758fbdc0")} {"x" : 4 , "j" : 5 , "_id" : ObjectId("497cf87151712cf7758fbdc1")} {"x" : 4 , "j" : 6 , "_id" : ObjectId("497cf87151712cf7758fbdc2")} {"x" : 4 , "j" : 7 , "_id" : ObjectId("497cf87151712cf7758fbdc3")} {"x" : 4 , "j" : 8 , "_id" : ObjectId("497cf87151712cf7758fbdc4")} 请注意下, 这里循环次数是10, 但是只显示到8, 还有2条数据没有显示. 如果想继续查询下面的数据只需要使用 it 命令, 就会继续下面的数据: {"x" : 4 , "j" : 7 , "_id" : ObjectId("497cf87151712cf7758fbdc3")} {"x" : 4 , "j" : 8 , "_id" : ObjectId("497cf87151712cf7758fbdc4")} 继续 it {"x" : 4 , "j" : 9 , "_id" : ObjectId("497cf87151712cf7758fbdc5")} {"x" : 4 , "j" : 10 , "_id" : ObjectId("497cf87151712cf7758fbdc6")} 从技术上讲 find() 返回一个游标对象. 但在上面的例子里, 并没有拿到一个游标的变量. 所以 shell 自动遍历游标, 返回一个初始化的set, 并允许我们继续用 it 迭代输出. 当然我们也可以直接用游标来输出, 不过这个是下一部分的内容了. 查询数据 在没有深入查询之前, 我们先看看怎么从一个查询中返回一个游标对象. 可以简单的通过 find() 来查询, 他返回一个任意结构的集合. 如果实现特定的查询稍后讲解. 实现上面同样的查询, 然后通过 while 来输出: var cursor = db.things.find(); while (cursor.hasNext()) { print(tojson(cursor.next())); } {"name" : "mongo" , "_id" : ObjectId("497cf60751712cf7758fbdbb")} {"x" : 3 , "_id" : ObjectId("497cf61651712cf7758fbdbc")} {"x" : 4 , "j" : 1 , "_id" : ObjectId("497cf87151712cf7758fbdbd")} {"x" : 4 , "j" : 2 , "_id" : ObjectId("497cf87151712cf7758fbdbe")} {"x" : 4 , "j" : 3 , "_id" : ObjectId("497cf87151712cf7758fbdbf")} {"x" : 4 , "j" : 4 , "_id" : ObjectId("497cf87151712cf7758fbdc0")} {"x" : 4 , "j" : 5 , "_id" : ObjectId("497cf87151712cf7758fbdc1")} {"x" : 4 , "j" : 6 , "_id" : ObjectId("497cf87151712cf7758fbdc2")} { ...
阅读全文 »