最近公司开发使用的MongoDB来做数据存储,以前大致看过MongoDB的数据库操作,上手项目也能勉强使用,但是趁着放假有时间还是要系统的学习下MongoDB的操作,要不然以后在使用的时候,容易出现自己都不知道的错误那就尴尬了。下面只是MongoDB的一些简单操作。后期在使用到复杂的操作,再百度用就行了。
数据库操作
1, show dbs;
2, db:显示当前数据库对象或者集合。
3, use [数据库]:连接到指定数据库。如果不存在自动创建数据库。
4, db.dropDatabase():删除当前数据库。
5,mongo 远程主机ip或DNS:MongoDB端口号/数据库名 -u user -p password:连接数据库
集合操作
1, db.createCollection(name,options)//默认不需要创建集合,在插入数据的时候,会自动创建。
Options可以为:
- capped:布尔-(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
- AutoIndexld:布尔-(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
- size:数值-(可选)为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段
- max:数值–(可选)指定固定集合中包含文档的最大数量。
2, db.集合名.drop():删除集合。
文档操作
1, db.collection_name.insert(document): document是一个BSON变量或者直接一个实体数据。
3.2版本后还有以下插入方式。
- db.collection_name.insertOne();
- db.collection_name.insertMany();
2, update方法: 用来更新文档。
db.collection_name.update(
<query>,//update的查询条件
<update>,//update的对象和一些更新操作符($,$inc…)可以理解为set后面的
{
upsert:<boolean>, //可选,如果update数据不存在,是否插入新数据,true插入,false不插入。
multi:<booleam>,//可选,默认为false,true的意思是把所有符合条件的记录全部更新。
writeConcern:<document>//可选,抛出异常的级别。
})
如果在文档中,不存在更新的域,则会自动创建新的域并保存数据。
3,save()方法: 通过传入的文档来替换已有文档。
db.collection.sava(
<document>,//文档数据
{
writeConcern:<document>//可选,抛出异常的级别
})
3.2版本后还有以下插入方式。
db.collection_name.updateOne();
db.collection_name.updateMany();
eg:
db.col.save({
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
})
4,文档删除:
db.collection.remove(
<query>,//可选,删除条件
<justOne>//可选,true或者1则只删除一个文档。默认为false
)
该方法已经过时,现在推荐使用以下方式。
db.collection.deleteOne();
db.collection.deleteMany();
5,文档查询: db.collection.find(query,projection);db.collection.find().pretty();格式化显示数据。
query:可选,查找指定条件的数据
projection:制定返回的字段名称,_id默认返回,如果不需要返回需要制定_id:0,其他的键在需要返回的时候,需要制定为1.eg:”name”:1|name:1
查询条件:
操作 格式 范例 Sql
逻辑运算:
(1)and: MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
Eg:db.col.find({key:value,key2:value2}).pretty()
(2)or:
db.col.find(
$or:[
{key1:value1},{key2:value2}
]).pretty();
(3)or和and联合使用
Eg:where ages > 50 and (name = “jym”or name = “ww”)
db.col.find({“ages”:{$gt:50},$or:[{“name”:”jym”},{“name”:”ww”}]})
6,$type操作符:基于BSON类型来检索集合中匹配的数据类型,并返回结果。
Eg:获取title为String类型的数据,也就是上表的type=2对应的String类型。
db.col.find({“title”:{$type:2}}).pretty();
7,limit()和skip()方法。
(1) limit():接受一个数字参数,该参数从指定的数据库读取的记录的条数。
Eg:db.col.find().limit(2).pretty();从查找的数据中读取前两条数据。
(2) skip():接受一个数字参数,该参数指定跳过的记录数。
Eg:db.col.find().skip(2).pretty();从查找的数据中跳过前两条数据。
8,排序: sort()通过参数指定排序的字段,并使用1和-1来指定排序的方式。1为升序-1位降序。
db.col.find().sort({key:1|-1});
9,索引: mongodb使用createIndex()方法来创建索引。
Db.col.createIndex(key,options);//key为索引的字段,1位升序创建索引。-1为降序创建索引。
在创建索引的时候,可以设置多个索引字段。
db.col.createIndex({key:1,key2:-1},[可选参数]);
具体的参数如下表:
15,聚合:主要用于处理数据(例如求平均值,求和等。)类似sql中的average()和count(*).
Mongodb中的聚合方式使用aggregate().
db.col.aggregate(AGGREGATE_OPERATION)
AGGREGATE_OPERATION的具体参数如下:
Eg:select by_user, count(*)from mycol group by by_user
db.mycol.aggregate([{$group: {_id : "$by_user", num_tutorial : {$sum : 1}}}])**