9. 9MongoDB操作 安装
wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-1.2.4.tgz
tar -zxvf mongodb-linux-x86_64-1.2.4.tgz
mkdir -p /data/db
cd /data/db
mkdir m_data m_log
cd mongodb-linux-x86_64-1.2.4
启动:
bin/mongod --dbpath=/data/db/m_data --logpath=/data/db/m_log --logappend --port=27017 &
10. 10
11. 11
12. 12
13. 13
14. 14
15. 15MongoDB操作 INSERT
使用 insert 插入文档。(insert into blog.users values(“user1”,”23))
> use blog switched to db blog
> u = { name:"user1", age:23 } > db.users.insert(u)
17. 172. QueryMongoDB 支持多种复杂的查询方式,能实现大多数 T-SQL 功能,远不是 Key-Value 之类的 NoSQL DB 所能比拟的。相关函数操作看上去非常像 .NET/C# Linq Method Syntax。有关查询优化和索引的细节请参考后文。
主要用到的查询函数式 find() 和 findOne(),前者返回一个迭代器 cursor,后者返回单个文档。
WHERE# select * from users where name = 'user1'> db.users.find({name:"user1"}){
"_id" : ObjectId("4c4528a0b55f2224d447e4b0"), "name" : "user1", "age" : 21, "sex" : 1 }
# select * from users where name = 'user1' and age = 21> db.users.find({name:"user1", age:21}){ "_id" : ObjectId("4c4528a0b55f2224d447e4b0"), "name" : "user1", "age" : 21, "sex" : 1 }MongoDB操作
18. 18FIELDS# select name, age from users where age = 21
> db.users.find({age:21}, {'name':1, 'age':1}){ "_id" : ObjectId("4c452c343d48c8f284b388e0"), "name" : "user1", "age" : 21 }
# select name, age from users> db.users.find({}, {'name':1, 'age':1})SORT# select * from users order by age> db.users.find().sort({age:1})# select * from users order by sex asce, age desc> db.users.find().sort({sex:1, age:-1})SLICE# select * from users skip 2 limit 3
> db.users.find().skip(2).limit(3)Conditional Operators# select * from users where sex = 1 and age > 23 and age < 28
> db.users.find({sex:1, age:{$gt:23, $lt:28}})
比较操作包括:$gt (>)、$lt (<)、$gte (>=)、$lte(<=)、$ne (!=)。
19. 19(6) IN# select * from users where age in (23, 26, 32)
> db.users.find({age:{$in:[23,26,32]}})
对应的操作符有 $nin (not in)。(7) COUNT# select count(*) from users where age > 30
> db.users.find({age:{$gt:30}}).count()
OR# select * from users where age = 25 or age = 28# select * from users where age <= 23 or age >= 33
> db.users.find({$or:[{age:25}, {age:28}]})
> db.users.find({$or:[{age:{$lte:23}}, {age:{$gte:33}}]})MongoDB操作
20. 20Update可直接用类似 T-SQL 条件表达式更新,或用 Save() 更新从数据库返回到文档对象。# update users set age = 100, sex = 0 where name = 'user1'
> db.users.update({name:"user1"}, {$set:{age:100, sex:0}})update() 有几个参数需要注意。
db.collection.update(criteria, objNew, upsert, mult)
criteria: 需要被更新的条件表达式objNew: 更新表达式upsert: 如目标记录不存在,是否插入新文档。multi: 是否更新多个文档。
# update users set age = age + 10
> db.users.update({}, {$inc:{age:10}}, false, true)
# update users set age = age + 10, sex = 1 where name = 'user1'
> db.users.update({name:"user1"}, {$inc:{age:10}, $set:{sex:1}})
Removeremove() 用于删除单个或全部文档,删除后的文档无法恢复。
> id = db.users.findOne({name:"user2"})._idObjectId("4c4508818c4a1e0bf570460f")> db.users.remove(id)//移除name='use2'的行
> db.users.remove()//移除所有
24. 24> db.people.insert({
name : 'John',
awesome : true,
shows : ['Dexter', 'LOST', 'How I Met Your Mother'],
info : {
age : 28,
home: 'South Bend, IN',
dob : (new Date('November 25, 1981'))
}
})
> var me = db.people.findOne({name:'John'})
> me.name
John
> me.awesome
true
> me.shows[1]
LOST
> me.info.age
28
> me.info.dob.getFullYear()
1981
25. 25 One to Many
一、 Normalized// insert post
> db.posts.insert({title:'Why Mongo Rocks'});
> var post = db.posts.findOne({title:'Why Mongo Rocks'});
// insert comment
> db.comments.insert({
name :'John',
body :'Because...',
post_id : post._id
});
var comment = db.comments.findOne({name:'John'});
> db.comments.find({post_id: post._id})
{
"_id" : ObjectId("4bee1cc79e89db4e12bf78de"),
"name" : "John",
"body" : "Because...",
"post_id" : ObjectId("4bee1c519e89db4e12bf78dd")
}