安装配置
1.从http://www.mongodb.org下载解压后,mongodb是一个独立的,不包含任何操作系统依赖,所以你可以在任何文件夹上运行mongodb,进到解压目录,运行:
md data
md data\db
来创建数据库文件夹,也可以手动指定数据库文件平,使用以下命令:
C:\mongodb\bin\mongod.exe --dbpath d:\test\mongodb\data
如果路径包含空格,用双引号包起来
C:\mongodb\bin\mongod.exe --dbpath "d:\test\mongo db data"
用户管理
以admin登录,admin user 可以查看任何数据库,添加用户并设置用户名密码:
$ // 连接到admin数据库,mongodb默认会有一个admin与local的数据库
$ mongo localhost/admin
> //在admin数据库,添加用户theadmin,并设置密码为anadminpassword
> db.addUser("theadmin", "anadminpassword")
> //设置theadmin的密码为:anadminpassword
> db.auth("theadmin", "anadminpassword")
> // 创建并使用projectx数据库,并在此数据库上添加一个用户名为joe,
> // 密码为passwordForJoe的用户,并授予读写权限
> use projectx
> db.addUser("joe", "passwordForJoe")
> //在数据库projectx上添加一个用户名为guest,密码为passwordForGuest的只读用户
> use projectx
> db.addUser("guest", "passwordForGuest", true)
> //用户信息是存在每个数据库的 system.users collection上的,例如projectx数据库上,
> //projectx.system.users collection包含了这个数据库的用户信息,使用以下命令查看它包含的用户:
> db。system.users.find();
> //如果某个用户已存在,使用addUser命令,即可修改用户密码
> //删除用户的命令
> db.removeUser( username )
> // 或者
> db.system.users.remove( { user: username } )
> // 检查数据库是否工作
> db.system.users.find()
> // 查看当前使用的数据库
> db
简单的查询
向集合中保存数据
> 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 }
>
使用for循环添加记录到集合
for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i});
> db.things.find();
// find()会返回一个游标对象(cursor object),如果我们没有给此游标对象分配给一个变量,则shell会自动迭代这个游标对象,给我们一个初始化的结果集(长度为20),因此执行此命令后,shell将的自动迭代游标将只列出集合中的20条文档记录,使用it命令可查看更多结果:
> it
使用查询访问数据
//把游标以迭代器的方式使用(推荐)
while的使用
> var cursor = db.things.find();
> while (cursor.hasNext()) printjson(cursor.next());
//使用迭代重复同一个查询,一次全部输出结果,printjson会将docment以json格式输出
forEach的使用
> db.things.find().forEach(printjson);
//使用forEach,就必须定义一个方法为每个文档的游标所调用,此外是内置printjson方法
//把游标以数组的方式使用(不推荐)
> var cursor = db.things.find();
> printjson(cursor[4]);
//把游标转化成实际的数组
> var arr = db.things.find().toArray();
> arr[5];
指定条件的查询
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 ..."
SELECT j FROM things WHERE x=4
> db.things.find({x:4}, {j:true}).forEach(printjson);
查询并仅返回一个文档findOne()
此方法执行查询将仅返回第一条记录文档,如果没有匹配的记录会返回null
> printjson(db.things.findOne({name:"mongo"}));
//这个查询相当于:find({name:"mongo"}).limit(1).
另外一种方式是通过_id,找出单个文档
> var doc = db.things.findOne({_id:ObjectId("4c2209f9f3924d31102bd84a")});
> doc
限制结果集大小通过limit()方法
> db.things.find().limit(3);
//查询things collection中的文档,限制只返回前3个文档
使用help命令可以查看 db 或 db.collection(这里的collection是collection的名字)的可用的方法摘要;直接键入方法的名字(不带"()")可以查看方法的原代码。
SQL到Mongo的比较映射表
创建表(collection)
CREATE TABLE USERS (a Number, b Number)
db.createCollection("mycoll")
//mongo也可以隐式的创建,使用时发现没有即自动创建
添加表字段
ALTER TABLE users ADD ...
//mongodb 隐式的添加,使用时发现没有即自动创建
插入数据
INSERT INTO USERS VALUES(3,5)
db.users.insert({a:3,b:5})
查询指定字段
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 * 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}})
条件不等于查询
SELECT * FROM users WHERE age!=33
db.users.find({age:{$ne:33}})
字符串匹配查询
SELECT * FROM users WHERE name LIKE "%Joe%"
db.users.find({name:/Joe/})
SELECT * FROM users WHERE name LIKE "Joe%"
db.users.find({name:/^Joe/})
降序排列
SELECT * FROM users ORDER BY name DESC
db.users.find().sort({name:-1})
复合条件查询
SELECT * FROM users WHERE age>33 AND age<=40
db.users.find({'age':{$gt:33,$lte:40}})
SELECT * FROM users WHERE a=1 and b='q'
db.users.find({a:1,b:'q'})
SELECT * FROM users WHERE a=1 or b=2
db.users.find({$or:[{a:1},{b:2}]})
限制结果集的查询
SELECT * FROM users LIMIT 10 SKIP 20
db.users.find().limit(10).skip(20)
SELECT * FROM users LIMIT 1
db.users.findOne()
多表查询
SELECT order_id FROM orders o, order_line_items li WHERE li.order_id=o.order_id AND li.sku=12345
db.orders.find({"items.sku":12345},{_id:1})
SELECT customer.name FROM customers,orders WHERE orders.id="q179" AND orders.custid=customer.id
var o = db.orders.findOne({_id:"q179"});
var name = db.customers.findOne({_id:o.custid})
去重查询
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()
创建索引
CREATE INDEX myindexname ON users(name)
db.users.ensureIndex({name:1})
CREATE INDEX myindexname ON users(name,ts DESC)
db.users.ensureIndex({name:1,ts:-1})
查看查询参数
EXPLAIN SELECT * FROM users WHERE z=3
db.users.find({z:3}).explain()
更新表(collection)
UPDATE users SET a=1 WHERE b='q'
db.users.update({b:'q'}, {$set:{a:1}}, false, true)
UPDATE users SET a=a+2 WHERE b='q'
db.users.update({b:'q'}, {$inc:{a:2}}, false, true)
删除表(collection)
DELETE FROM users WHERE z="abc"
db.users.remove({z:'abc'});