0.背景
1.MongoDB是一种NoSql数据库,不支持sql语言,没有表结构,放弃了对事物的支持,不能进行多表查询。性能更好。
MongoDB的特点:
2.无数据结构的限制
1.无表结构的概念,每条结构可以有完全不同的结构
2.业务开发快捷方便
3.完全的索引支持:
1.Redis的key-value
2.hbase的单索引,二级索引需自己实现
1.基本操作:
sudo service mongodb start 停止MongoDB sudo service mongodb stop 重启 MongoDB sudo service mongodb restart 要使用MongoDB 运行以下命令 mongo MongoDB的服务器统计,需要在MongoDB客户端键入命令db.stats()
2.语法:
2.1 use DATABASE_NAME 用于创建数据库:
db.COLLECTION_NAME.insert(document) >db.mycol.insert({ _id: ObjectId(7df78ad8902c), title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials yiibai', url: 'http://www.yiibai.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
这里 mycol 是集合的名称,如前面的教程中创建。如果集合在数据库中不存在,那么MongoDB 将创建此集合,然后把它插入文档。
插入文档中,如果我们不指定_id参数,然后MongoDB 本文档分配一个独特的ObjectId。
_id 是12个字节的十六进制数,唯一一个集合中的每个文档。 12个字节被划分如下:
_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
插入单个查询的多个文档,可以传递一个数组 >db.post.insert([ { title: 'MongoDB Overview', description: 'MongoDB is no sql database', by: 'tutorials yiibai', url: 'http://www.yiibai.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { title: 'NoSQL Database', description: 'NoSQL database doesn't have tables', by: 'tutorials yiibai', url: 'http://www.yiibai.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 20, comments: [ { user:'user1', message: 'My first comment', dateCreated: new Date(2013,11,10,2,35), like: 0 } ] } ])
3. 查询
3.1 显示一个格式化的结果:db.mycol.find().pretty()
3.2 AND 在MongoDB中用法
在 find() 方法,如果通过多个键分离’,’,那么 MongoDB 处理 AND 条件。AND 基本语法如下所示
>db.mycol.find({key1:value1, key2:value2}).pretty()
如:db.post.find({"by":"tutorials yiibai","title": "MongoDB Overview"}).pretty()
3.3 MongoDB中OR
>db.mycol.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty() db.post.find({$or:[{"by":"yiibai"},{"title": "MongoDB Overview"}]}).pretty()
3.4 and 和or 一块使用:
QL where子句 为 'where likes>10 AND (by = 'yiibai' OR title = 'MongoDB Overview')' >db.mycol.find("likes": {$gt:10}, $or: [{"by": "yiibai"}, {"title": "MongoDB Overview"}] }).pretty()
4. 更新
语法:db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
db.mycol.update({‘title’:’MongoDB Overview’},{$set:{‘title’:’New MongoDB Tutorial’}})
MongoDB默认将只更新单一的文件,来更新多个你需要设置参数置’multi’ 为true
db.mycol.update({‘title’:’MongoDB Overview’},{$set:{‘title’:’New MongoDB Tutorial’}},{multi:true})
5. 投影
MongoDB 的find()方法,在 MongoDB查询 文档解释接受第二个可选参数是要检索的字段列表。在MongoDB中,当执行find()方法,那么它会显示一个文档所有字段。要限制这一点,需要设置的字段列表值1或0。 1用来显示字段而0是用来隐藏字段。
find()方法具有投影基本语法如下
>db.COLLECTION_NAME.find({},{KEY:1}) >db.post.find({},{"title":1,_id:0})
6.limit 和skip
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) # skip 默认是0 db.post.find({},{"title":1,_id:0}).limit(1).skip(2) 跳过前两条,查寻一条结果