MongoDB中,一个数据库包含多个集合(相似关系型数据库的表),一个集合包含多个文档(相似关系型数据库的一行记录),文档存储方式是类JSON的BSON存储数据,BSON能够理解为在JSON格式上添加了一些JSON没有的数据类型。正则表达式
文档:sql
两个文档之间有 嵌入式关系 和 引用式关系数据库
集合:json
集合就是各类文档的集合,MongoDB的同一个集合能够存储不一样结构的多个文档,例如:数组
{"company":"Chenshi keji"} {"people":"man","name":"peter"}
数据库的信息存储在集合中,他们统一使用系统的命名空间:DBNAME.system.* DBNAME 可用 db 或数据库名替代服务器
数据库操做:数据结构
集合的操做:app
db.createCollection("users") //无参
db.createCollection("shiyanlou2", { capped : 1, autoIndexID : 1, size : 6142800, max : 10000 } )
参数描述:函数
show collections
db.users.drop
文档的操做:post
insert() db.users.insert([ ... { name : "jam", ... email : "jam@qq.com"... }, ... { name : "tom", ... email : "tom@qq.com"... } ... ]) save() db.users.save([ ... { name : "jam", ... email : "jam@qq.com"... }, ... { name : "tom", ... email : "tom@qq.com"... } ... ])
查询整个集合
db.users.find() db.users.find().pretty() //更美观的显示方式
and查询
db.users.find({ key1: value1, key2: value2 }).pretty()
or查询
db.users.find( { $or: [ {key1: value1}, {key2: value2} ] } ).pretty()
同时使用and和or
db.post.find({ "number": {$gt:10}, $or: [ {"by": "shiyanlou"}, {"title": "MongoDB Overview"} ] }).pretty()
{$gt:10} 表示大于10,另外,$lt 表示小于,$lte 表示小于等于,$gte 表示大于等于,$ne 表示不等于
db.shiyanlou.update({"user_id":2,"e-mail":"test@qq.com"},{$set:{"e-mail":"group@qq.com"}})
db.shiyanlou.save({"_id":ObjectId("53ea174ccb4c62646d9544f4"),"name":"Bob","position":"techer"})
_id 对应的是要替换文档的 _id
db.shiyanlou.remove({"name":"Bob"})
db.shiyanlou.find({"name":{$type:2}})
查找name是字符串的文档记录。
db.shiyanlou.find().limit(1) //读取一条记录,默认是排在最前面的那条被读取 db.shiyanlou.find().limit(1).skip(1) //读取时跳过指定数量的记录
db.COLLECTION_NAME.find().sort({KEY:1|-1}) //升序1 降序-1
例如:
db.shiyanlou.find().sort({"time":1}
索引是特殊的数据结构,存储在容易遍历读取的数据集合里,是对数据库集合中的一个或者多个文档的值进行排序的一种结构。
db.COLLECTION_NAME.ensureIndex({KEY:1|-1}) //升序1 降序-1
例如:
db.shiyanlou.ensureIndex({"name":1})
explain()显示查询的详细元数据
db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
结果中字段解释: