涨姿势
1.MySQL与Mongo中的一些概念对比:
SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段(列)/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键
基本语法规则
1.DDL语法(操作数据库及表的结构)
----++----对数据库的操作----++----
1.1 查看所有数据库
show dbs #查看所有数据库
db #查看当前数据库
1.2 创建及使用数据库:
#若没有此数据库则创建
use tbl
1.3删除数据库
#删除当前数据库
db.dropDatabases()
----++----对集合结构(MySQL中的表)的操作----++----
1.4 创建集合
db.createCollection(name,options)
db.createCollection("mycol", {capped : true, autoIndexId : true, size : 6142800, max : 10000 })
e.g. db.createCollection("mycollection")
options参数是可选的,因此只需要指定集合的名称。 以下是可以使用的选项列表:
字段 类型 描述
capped Boolean(可选) 如果为true,则启用封闭的集合。上限集合是固定大小的集合,它在达到其最大大小时自动覆盖其最旧的条目。 如果指定true,则还需要指定size参数。
autoIndexId Boolean (可选) 如果为true,则在_id字段上自动创建索引。默认值为false。
size 数字 (可选) 指定上限集合的最大大小(以字节为单位)。 如果capped为true,那么还需要指定此字段的值。
max 数字 (可选) 指定上限集合中允许的最大文档数。
在插入文档时,MongoDB首先检查上限集合capped字段的大小,然后检查max字段。
1.5 查看数据库中的所有集合
show collections
或
show tables
1.6 查看集合的结构
db.mycol1.find()
1.7 删除集合
db.mycol1.drop()
修改集合:
mongoDB没有表的概念,都是一个个集合,所以这里只说一个修改集合的键值的方法。
1.8 修改集合之修改键值(MySQL中对应为字段名)
db.mycol1.update({}, {$rename:{"旧键名称":"新键名称"}}, false, true)
第一个false表示:可选,这个参数的意思是,如果不存在update的记录,true为插入新的记录,默认是false,不插入。
第二个true表示:可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
2.DDL语法(数据操作)
2.1 增
法一:
db.mycol1.insert({
name:'zhangsan',
age:23,
phone:1877768121
})
法二:
document = ({
name:'lisi',
age:19,
phone:15633577595
});
db.mycol1.insert(document)
2.2 改
2.2.1 update()方法
db.collection.update(criteria,objNew,upsert,multi)
参数说明:
query:用于设置查询条件的对象,可以理解为sql查询中的where后面的
update:用于设置更新内容的对象,也可以理解为sql update查询内set后面的
upsert:如果记录不存在是否新增一个记录,默认false
multi:如果有多个符合条件的记录,是否全部更新,默认为false
writeConcern :可选,抛出异常的级别。
db.mycol1.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
e.g.
#将用户名称为"zhangsan"用户的年龄更改为18。
db.col_1.update({name:'zhangsan'},{$set:{age:18}})
#后面默认为false,false,这两个组合可以分出很多情况。
2.2.1 save()方法
save()方法为替换原有文档
db.mycol1.save({
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
})
2.3 删
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
以下为实例:
#删除所有的文档
db.mycol1.remove({})
#移除集合中查询到的数据的第一条,后面设成1或者true,表示只删除一个文档。
db.mycol1.romve({name:'zhangsan'},1)
3.DQL语法(数据查询)
3.1 基础语法:
MongoDB 查询数据的语法格式如下:
db.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
>db.col.find().pretty()
pretty() 方法以格式化的方式来显示所有文档。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
db.mycol1.find() #查询所有文档
db.mycol1.findOne() #查询第一个文档
db.mycol1.find().pretty() #查询所有文档并格式化输出
db.mycol1.find().count() #查询到的文档的数目
db.mycol1.find().skip() #跳过指定数量的数据
db.mycol1.find().limit() #显示文档数
e.g.读取十条数据后的100条记录
db.mycol1.find().skip(10).limit(100)
3.2 查询+where语句
如果你想获取"col"集合中 "likes" 大于100,小于 200 的数据,你可以使用以下命令:
db.mycol1.find({likes : {$lt :200, $gt : 100}})
// 类似于SQL语句:
Select * from mycol1 where likes>100 AND likes<200;
条件操作符 中文 全英文
$gt 大于 greater than
$gte 大于等于 greater than equal
$lt 小于 less than
$lte 小于等于 less than equal
$ne 不等于 not equal
3.3 AND条件
find() 方法可以传入多个键(key),每个键(key)以逗号隔开,语法格式如下:
db.col_1.find({name:'zhangsan',age:18}).pretty()
3.4 OR 条件
db.col_1.find({$or:[{name:'zhangsan'},{age:20}]}).pretty()
3.5 AND 和 OR 联合使用
db.col_1.find({"likes":{$gt:50},$or:[{age:20},{phone:15633577595}]}).pretty()
3.6 $exists()
$exists,用于查询集合中存在某个键的文档或不存在某个键的文档,例如查询col_1集合中存在name键的所有文档
db.col_1.find({name:{$exists:1}})
3.7 $in和$nin
查询年龄在18,19,20在这个区间的文档
db.col_1.find({age:{$in:[18,19,20]}})
查询年龄不在18,19,20在这个区间的文档
db.col_1.find({age:{$nin:[18,19,20]}})
部分部署可参考:http://blog.csdn.net/sinat_36841379/article/details/70653027