MongoDB笔记1(安装配置、用户管理、查询与SQL比较)

 

安装配置

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默认会有一个adminlocal的数据库

$ 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包含了这个数据库的用户信息,使用以下命令查看它包含的用户:

> dbsystem.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会将docmentjson格式输出

 

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(这里的collectioncollection的名字)的可用的方法摘要;直接键入方法的名字(不带"()")可以查看方法的原代码。

 

SQLMongo的比较映射表

 

 

创建表(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'});

 

 

 

 

 

转载于:https://www.cnblogs.com/luowei010101/archive/2012/09/06/2674093.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值