mongodb入门操作
简单了解一下NoSql
NoSql
NoSql = not only sql
是非关系型数据库系统的统称,
它用于超大规模的数据的存储,提供有限的查询功能。
mongodb
mongodb是一个基于分布式文件存储的数据库系统
基础概念
一条数据在mongodb是一个文档,
文档是由一组键值对组成的;
集合没有固定的结构,
集合中的每一个文档,不需要有相同的字段,
并且相同的字段也可以是不相同的数据类型,
但是需要注意的是,文档的键值对是有序的,
通常情况下,我们insert同一集合的数据都会有一定的关联性。
例如:
{“site”: “www.baidu.com”}
{“site”: “www.tencent.com”, “name”: “腾讯”}
主键
插入文档时会自动生成主键"_id",是一个objectId类型的对象。
创建数据库
use superv
superv是我们的数据库名字,如果存在,切换到superv,
不存在则创建superv。
但是show dbs并不会显示superv,
当我们向superv添加一条数据的时,superv才真正创建。
db.superv.insert({"name": "abc"})
删除数据库
删除当前数据库
db.dropDatabase()
{ “dropped” : “superv”, “ok” : 1 }
创建集合
db.createCollection(“superv”)
{ “ok” : 1 }
查看集合
show collections
或
show tables
删除集合
db.superv.drop()
true
插入文档
文档的数据结构和json基本一致,
集合中的文档都是bson格式,
bson是一种二进制json存储格式,是binary json的简称。
db.collectionName.insert(document)
如果主键"_id"在集合中已存在,则抛出异常,插入失败。
db.superv.insert({"name": "abc", "age": 20})
WriteResult({ “nInserted” : 1 })
查看刚才插入的数据:
db.superv.find()
{ “_id” : ObjectId(“5fe58498182775e0c4afded4”), “name” : “abc”, “age” : 20 }
更新文档
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
query:
update的查询条件,类似sql update查询内的where语句。
update:
update的对象和一些更新的操作符(如
,
,
,inc…)等,
类似sql update查询内的set语句。
upsert:
可选,如果不存在满足查询条件的记录,
是否插入一条新纪录objNew,true为插入,默认是false,不插入。
multi:
可选,是否全更新满足查询条件的记录,
如果为true,就更新所有满足条件的记录,默认false,只第一条。
writeConcern:
可选,抛出异常的级别。
实例:
db.superv.update({"name": "abc"}, {$set:{"name": "abcd"}}, {multi: true})
WriteResult({ “nMatched” : 1, “nUpserted” : 0, “nModified” : 1 })
删除文档
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
query:
(可选)删除的查询条件。
justOne:
(可选)如果设置为true,或者是1,
则只删除一个文档,默认false,删除所有匹配条件的文档。
writeConcern:
(可选)抛出异常的级别。
实例:
db.superv.remove({"age": 20})
WriteResult({ “nRemoved” : 2 })
删除所有文档:
db.superv.remove({})
查询文档
db.collection.find(query, projection)
参数说明:
query:
(可选)查询条件
projection:
(可选)投影,指定查询返回的字段,即filed,默认返回全部。
实例:
db.superv.find({"age": 24}).pretty()
只查询一条:
db.superv.findOne({"age": 24})
与sql条件查询比较
如果你sql查询比较熟悉,
通过对比可以更好的理解MongoDB的条件查询。
AND
语法:
db.col.find({key1:value1, key2:value2}).pretty()
实例:
db.superv.find({"age": 23, "name": "abc"}).pretty()
OR
语法:
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
实例:
db.superv.find(
{
$or: [
{"age": 20}, {"age":21}
]
}
).pretty()
$type操作符
这是事先新增的数据:
查询age字段为String类型的文档:
注意:string一定要全部小写。
db.superv.find({"age": {$type: "string"}})
Bson中的类型包含:
sort排序
db.COLLECTION_NAME.find().sort({KEY: 1})
1为升序,-1为降序。
实例:
按照年龄正序排序。
db.superv.find().sort({"age": 1}).pretty()
limit和skip
执行顺序:sort() > skip() > limit()
查询满足条件的第二条文档:
db.superv.find({"name": "abc"}).limit(1).skip(1).sort({"age": 1})
索引
索引是对数据库表中一列或多列的值进行排序的一种结构。
创建索引:
db.collection.createIndex(keys, options)
实例:
db.superv.createIndex({"age": 1})
聚合
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
实例:
查询每个年龄的人数。
注意,"_id"是固定的,不能替换成别的。
db.superv.aggregate([{$group : {_id : "$age", count : {$sum : 1}}}])
参考资料:
菜鸟教程:MongoDB 教程