1.回顾:上篇已经学习过 Mongodb的安装的两种方式
2.这篇将学习 mongodb的基本命令
3.准备 :安装好mongodb后,需要先打开mongodb服务,后打开一个客户端 (cmd操作)
4.创建数据库,对象和集合
4.1 新建数据库 db
use student
4.2 新建集合 Collection
db.createCollection("LABELNET");
4.3 新建 文档 document
document={"name":"yuan","age":23}
4.4 查看所有数据库
show dbs
4.5 查看一个数据库下的集合状态
use student;
db.printCollectionStats();
4.6 演示结果:
> use student
switched to db student
> db.createCollection("LABELNET");
{ "ok" : 1 }
> document={"name":"yuan","age":23}
{ "name" : "yuan", "age" : 23 }
> show dbs
local 0.078GB
student 0.078GB
> use student
switched to db student
> db.printCollectionStats();
LABELNET
{
"ns" : "student.LABELNET",
"count" : 0,
"size" : 0,
"numExtents" : 1,
"storageSize" : 8192,
"lastExtentSize" : 8192,
"paddingFactor" : 1,
"paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0.
It remains hard coded to 1.0 for compatibility only.",
"userFlags" : 1,
"capped" : false,
"nindexes" : 1,
"totalIndexSize" : 8176,
"indexSizes" : {
"_id_" : 8176
},
"ok" : 1
}
---
system.indexes
{
"ns" : "student.system.indexes",
"count" : 1,
"size" : 112,
"avgObjSize" : 112,
"numExtents" : 1,
"storageSize" : 8192,
"lastExtentSize" : 8192,
"paddingFactor" : 1,
"paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0.
It remains hard coded to 1.0 for compatibility only.",
"userFlags" : 0,
"capped" : false,
"nindexes" : 0,
"totalIndexSize" : 0,
"indexSizes" : {
},
"ok" : 1
}
---
>
5. 插入操作 insert
5.1 可以先定义一个文档document ,后将文档插入到集合中。或者直接将输入插入到集合中。
5.2 基本格式
db.集合名称.insert(已定义的文档);
db.集合名称.insert(数据);
5.3 演示示例
---
> db.LABELNET.insert({"name":"csdn","age":"老大了!"});
WriteResult({ "nInserted" : 1 })
> document={"name":"yuan",age:"23"};
{ "name" : "yuan", "age" : "23" }
> db.LABELNET.insert(document);
WriteResult({ "nInserted" : 1 })
6. 查询操作 find
6.1 基本格式
(1)db.集合名称.find();显示文档
(2)db.集合名称.find(where);
(3)db.集合名称.find({"name":{$type:2}});
6.2 基本查询
> db.LABELNET.find();
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : "老大了
!" }
{ "_id" : ObjectId("55bec43732cbb5faa25c967d"), "name" : "yuan", "age" : "23" }
$type操作符是基于BSON类型来检索集合中匹配的结果。
db.集合名称.find({"name":{$type:2}});
$type 对应得值 有下面几种:
Double 1
String 2
Object 3
Array 4
Binary data 5
Object id 7
Boolean 8
Date 9
Null 10
Regular expression 11
JavaScript code 13
Symbol 14
JavaScript code with scope 15
32-bit integer 16
Timestamp 17
64-bit integer 18
Min key 255
Max key 127
演示示例:
> db.LABELNET.find({"name":"yuan"});
{ "_id" : ObjectId("55bec43732cbb5faa25c967d"), "name" : "yuan", "age" : "23" }
> db.LABELNET.find({"name":{$type:2}});
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : "老大了
!" }
{ "_id" : ObjectId("55bec43732cbb5faa25c967d"), "name" : "yuan", "age" : "23" }
>
6.4 满足条件的,取固定条数 : db.集合名称.find({条件}).limit(10);
7.修改数据 update
7.1基本格式 : 注意条件
db.集合名称.update(where,set,未找到插入新的为true,更新多条为true);
7.2 演示 示例 : 修改 name为csdn的 age值
> db.LABELNET.update({"name":"csdn"},{"$set":{"age":16}},false,true);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.LABELNET.find();
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : 16 }
{ "_id" : ObjectId("55bec43732cbb5faa25c967d"), "name" : "yuan", "age" : "23" }
>
7.3 向集合中的某个文档添加字段 push
> db.LABELNET.update({"name":"yuan"},{$push:{"csdnBlog":"http://blog.youkuaiyun.com/la
blenet"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.LABELNET.find();
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : 16 }
{ "_id" : ObjectId("55bec43732cbb5faa25c967d"), "name" : "yuan", "age" : "23", "
csdnBlog" : [ "http://blog.youkuaiyun.com/lablenet" ] }
>
8.1 基本格式
(1)db.集合名称.remove(where); 条件删除
(2) db.集合名称.remove(); 删除全部记录
(3) db.集合名称.drop(); 删除全部文档(document)
8.2 演示示例 :条件删除
> db.LABELNET.remove({"name":"yuan"});
WriteResult({ "nRemoved" : 1 })
> db.LABELNET.find();
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : 16 }
>
9. 其他操作
9.1 先准备数据
> db.LABELNET.insert({"name":"yuan","age":23});
WriteResult({ "nInserted" : 1 })
> db.LABELNET.insert({"name":"ming","age":10});
WriteResult({ "nInserted" : 1 })
> db.LABELNET.insert({"name":"zhuo","age":30});
WriteResult({ "nInserted" : 1 })
> db.LABELNET.insert({"name":"hpu","age":30});
WriteResult({ "nInserted" : 1 })
> db.LABELNET.find();
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : 16 }
{ "_id" : ObjectId("55beca3932cbb5faa25c967e"), "name" : "yuan", "age" : 23 }
{ "_id" : ObjectId("55beca4632cbb5faa25c967f"), "name" : "ming", "age" : 10 }
{ "_id" : ObjectId("55beca5132cbb5faa25c9680"), "name" : "zhuo", "age" : 30 }
{ "_id" : ObjectId("55beca9f32cbb5faa25c9681"), "name" : "hpu", "age" : 30 }
>
9.1 条件查询 —— > , < , >= ,<=
(1) (>) 大于 - $gt
(2)(<) 小于 - $lt
(3)(>=) 大于等于 - $gte
(4)(<= ) 小于等于 - $lte
> db.LABELNET.find({"age":{"$gt":16}});
{ "_id" : ObjectId("55beca3932cbb5faa25c967e"), "name" : "yuan", "age" : 23 }
{ "_id" : ObjectId("55beca5132cbb5faa25c9680"), "name" : "zhuo", "age" : 30 }
{ "_id" : ObjectId("55beca9f32cbb5faa25c9681"), "name" : "hpu", "age" : 30 }
> db.LABELNET.find({"age":{"$lt":16}});
{ "_id" : ObjectId("55beca4632cbb5faa25c967f"), "name" : "ming", "age" : 10 }
> db.LABELNET.find({"age":{"$gte":16}});
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : 16 }
{ "_id" : ObjectId("55beca3932cbb5faa25c967e"), "name" : "yuan", "age" : 23 }
{ "_id" : ObjectId("55beca5132cbb5faa25c9680"), "name" : "zhuo", "age" : 30 }
{ "_id" : ObjectId("55beca9f32cbb5faa25c9681"), "name" : "hpu", "age" : 30 }
> db.LABELNET.find({"age":{"$lte":16}});
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : 16 }
{ "_id" : ObjectId("55beca4632cbb5faa25c967f"), "name" : "ming", "age" : 10 }
> db.LABELNET.find({"age":16});
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : 16 }
>
9.2 满足条件的条数 count
> db.LABELNET.count({"age":30});
2
>
9.3 得到所有key的value(去掉重复的) distinct
> db.LABELNET.distinct("age");
[ 16, 23, 10, 30 ]
>
9.4 查看集合的数据大小 dataSize : 注意S 大写
> db.LABELNET.dataSize();
560
>
9.5 查看集合状态 stats
> db.LABELNET.stats();
{
"ns" : "student.LABELNET",
"count" : 5,
"size" : 560,
"avgObjSize" : 112,
"numExtents" : 1,
"storageSize" : 8192,
"lastExtentSize" : 8192,
"paddingFactor" : 1,
"paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0.
It remains hard coded to 1.0 for compatibility only.",
"userFlags" : 1,
"capped" : false,
"nindexes" : 1,
"totalIndexSize" : 8176,
"indexSizes" : {
"_id_" : 8176
},
"ok" : 1
}
9.6 分页查询 skip 和 limit (类似于 linq 操作)
> db.LABELNET.find().skip(2).limit(2);
{ "_id" : ObjectId("55beca4632cbb5faa25c967f"), "name" : "ming", "age" : 10 }
{ "_id" : ObjectId("55beca5132cbb5faa25c9680"), "name" : "zhuo", "age" : 30 }
> db.LABELNET.find().skip(0).limit(2);
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : 16 }
{ "_id" : ObjectId("55beca3932cbb5faa25c967e"), "name" : "yuan", "age" : 23 }
>
9.7 排序分页 sort , skip , limit
> db.LABELNET.find().sort({"age":1}).skip(0).limit(2);
{ "_id" : ObjectId("55beca4632cbb5faa25c967f"), "name" : "ming", "age" : 10 }
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : 16 }
> db.LABELNET.find().sort({"age":1}).skip(2).limit(2);
{ "_id" : ObjectId("55beca3932cbb5faa25c967e"), "name" : "yuan", "age" : 23 }
{ "_id" : ObjectId("55beca5132cbb5faa25c9680"), "name" : "zhuo", "age" : 30 }
>
10.操作函数
10.1 示例 :插入100 条数据
> for(var i=0;i<100;i++){var ran=parseInt(i*Math.random());db.LABELNET.insert({"
name":"yuan","age":ran});}
WriteResult({ "nInserted" : 1 })
> db.LABELNET.find();
{ "_id" : ObjectId("55bec40532cbb5faa25c967c"), "name" : "csdn", "age" : 16 }
{ "_id" : ObjectId("55beca3932cbb5faa25c967e"), "name" : "yuan", "age" : 23 }
{ "_id" : ObjectId("55beca4632cbb5faa25c967f"), "name" : "ming", "age" : 10 }
{ "_id" : ObjectId("55beca5132cbb5faa25c9680"), "name" : "zhuo", "age" : 30 }
{ "_id" : ObjectId("55beca9f32cbb5faa25c9681"), "name" : "hpu", "age" : 30 }
{ "_id" : ObjectId("55becfee32cbb5faa25c9682"), "name" : "yuan", "age" : 0 }
{ "_id" : ObjectId("55becfee32cbb5faa25c9683"), "name" : "yuan", "age" : 0 }
{ "_id" : ObjectId("55becfee32cbb5faa25c9684"), "name" : "yuan", "age" : 1 }
{ "_id" : ObjectId("55becfee32cbb5faa25c9685"), "name" : "yuan", "age" : 1 }
{ "_id" : ObjectId("55becfee32cbb5faa25c9686"), "name" : "yuan", "age" : 3 }
{ "_id" : ObjectId("55becfee32cbb5faa25c9687"), "name" : "yuan", "age" : 2 }
{ "_id" : ObjectId("55becfee32cbb5faa25c9688"), "name" : "yuan", "age" : 1 }
{ "_id" : ObjectId("55becfee32cbb5faa25c9689"), "name" : "yuan", "age" : 3 }
{ "_id" : ObjectId("55becfee32cbb5faa25c968a"), "name" : "yuan", "age" : 7 }
10.2 去某个key的值
> var list=db.LABELNET.find(); list.forEach(function(x){print(x.name);});
csdn
yuan
ming
zhuo
hpu
yuan
yuan
yuan
yuan
yuan
yuan
yuan
yuan
yuan
yuan
yuan
首先我们查到 age为83的 是最后一条,且仅此一条
{ "_id" : ObjectId("55becfee32cbb5faa25c96e5"), "name" : "yuan", "age" : 83 }
> db.LABELNET.count({"age":83});
1
>
后我们查询这个 age为 83 的文档 :
> db.LABELNET.count({"age":83});
1
> db.LABELNET.find({"age":83}).explain() ;
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "student.LABELNET",
"indexFilterSet" : false,
"parsedQuery" : {
"age" : {
"$eq" : 83
}
},
"winningPlan" : {
"stage" : "COLLSCAN",
"filter" : {
"age" : {
"$eq" : 83
}
},
"direction" : "forward"
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "LABELNET",
"port" : 27017,
"version" : "3.0.5",
"gitVersion" : "8bc4ae20708dbb493cb09338d9e7be6698e4a3a3"
},
"ok" : 1
}
>
11.索引 (非常重要,可提供查询速度)ensureIndex
11.1 添加唯一索引
> db.LABELNET.ensureIndex({"name":1},{"unique":true});
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"errmsg" : "exception: E11000 duplicate key error index: student.LABELNE
T.$name_1 dup key: { : \"yuan\" }",
"code" : 11000,
"ok" : 0
}
>
11.2 添加其他索引
> db.LABELNET.ensureIndex({"name":1,"age":1});
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
>
11.3 查看所有索引
> db.LABELNET.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "student.LABELNET"
},
{
"v" : 1,
"key" : {
"name" : 1,
"age" : 1
},
"name" : "name_1_age_1",
"ns" : "student.LABELNET"
}
]
11.4 删除索引
可能随着业务需求的变化,原先建立的索引可能没有存在的必要了,可能有的人想说没必要就没必要呗, 但是请记住,索引会降低CUD这三种操作的性能。
> db.LABELNET.dropIndex("name_1_age_1");
{ "nIndexesWas" : 2, "ok" : 1 }
> db.LABELNET.getIndexes();
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "student.LABELNET"
}
]
>
基本命令 就学到这里了,下篇将学习使用 mongodb 的 C#驱动 实现增删改查!