官方文档:https://wizardforcel.gitbooks.io/w3school-mongodb/content/16.html
-
一个数据库对应多个集合
- 一个集合对应多个文档对象
- 在mongo中不论是db还是集合,你都无需去创建他
- 直接就当他已经存在,直接Use来使用
- use db名称;
- 接着会被切换到该db中
db.要创建的集合名称.save({})
;这样集合就被创建了
- use db名称;
-
解决32位异常
mongod --dbpath=“路径” --journal --storageEngine=mmapv1 -
1:启动服务器
mongod --dbpath "D:/mongodb/db"
// 目录一定要存在自己创建随便名称‘- 尽量设置在非系统盘
C盘生成目录是需要权限的
- 尽量设置在非系统盘
- 如果看到
waiting for connections on port 27017
说明服务已经启动
-
客户端连接服务器另开一个命令行
mongo
默认连接的是test数据库
-
查询有哪些数据库
-
查询数据库:
show dbs;
-
——>默认3个表(DB)admin config local
-
切换数据库:
use 数据库名;
——> switched to db 数据库名字
-
-
查询当前db下有哪些集合(自己创建的表)
show collections;
- db.集合 获取的集合对象,操作集合(表)中数据的方法都在 集合对象中,例如: find() remove()…
-
查询数据:
db.集合名.find();
//查询出来的是文档对象 documentdb.users.find();
-
添加数据:
db.集合名.save(对象)
//mongo默认会给我们加入_id作为该文档对象的唯一标识db.users.save({contry:'中国',‘name’:'小明',‘score’:77});
-
删除数据:
db.集合名.remove(条件对象);
//条件匹配的文档对象都会被删除,可以为多条db.users.remove({name:'小明'});
- 如果给定一个空对像,会匹配全部
-
更新数据:
db.集合名.update({匹配条件对象},{$set:{修改后的对象}});
db.users.update({name:'小明'},{$set:{contry:'印度'}});;
条件查询
推荐:db.集合.find(正则)
练习:
查询姓名为小明的学生
db.users.find({name:'小明'});; 查询英语成绩大于90分的同学
db.users.find({score:{$gt:90}}); //查找成绩大于90分$gt
//$lt小于
查询数学成绩不等于88的同学
db.users.find({score:{$ne:88}}); 查询总分大于200分的所有同学
db.users.find({score:{$gt:200}});
分页
集合;其实也是数据;所以一个集合中数据;也有索引值;从0 开始的 0表示第一条数据
db.users.find().skip(3).limit(3);
- —> skip(i) 参数为数据索引值;表示从给第i+1个数据开始显示。
- —> limit(m) 表示显示几条数据
- db.集合名称.find().跳到3(从滴4条数据开始).显示3条
+ limit 0,3
排序
db.users.find().sort({key:排序方式});
- ——> key 表示根据那个属性后面的值进行排序;
db.users.find().sort({'score':1});
//正数代表升序,负数代表降序
模糊匹配
db.users.find({name:{$regex:'小'}});
db.users.find({name:{$regex:'明'}});
- 推荐:条件为正则
- db.集合find(key:正则) // key 根据什么字段查询
聚合函数
主要作用;完成分组;一个组:就是一个对象下一个数组
- 需要求当前集合的记录数:
db.users.find().count();
- 求最大值
-求整个集合的总成绩
+ db.集合名.聚合({ 组的划分规则{_id:‘1’,显示内容:{ s u m : ′ sum:' sum:′score’}} })- 求所有人的平均分
db.users.aggregate({$group:{_id:'1',avgscore:{$avg:'$score' } }});
- —> $group 分组 固定写法,_id表示组的id 与字段中id 不是一回事
- —>aggregate计平均值,求和 $avg — 求平均值 $sum 求和
- —> avgscore 平均值的key $score 根据那个字段求平均值或求和
- ————>语法: db.集合.aggregate({KaTeX parse error: Expected '}', got 'EOF' at end of input: …p:{_id:值},key:{avg:$字段}})
- 求按国家分组,求所有国家的总分 $contry 找到国家字段
db.users.aggregate({$group:{_id:'$contry',sumScore:{$sum:'$score'}}});
- 求所有人的平均分
- 添加基础数据:
db.users.save({contry:‘中国’,name:‘小明’,score:77});
db.users.save({contry:‘中国’,name:‘小红’,score:88});
db.users.save({contry:‘中国’,name:‘小张’,score:99});
db.users.save({contry:‘美国’,name:‘jack’,score:45});
db.users.save({contry:‘美国’,name:‘rose’,score:67});
db.users.save({contry:‘美国’,name:‘mick’,score:89});
联合查询 (关系)
根据一个集合中的某个字段;查询另一个集合中的数据
db.orders.insert([
{ "_id" : 1, "item" : "almonds", "price" : 12, "quantity" : 2 },
{ "_id" : 2, "item" : "pecans", "price" : 20, "quantity" : 1 },
{ "_id" : 3 }
]);
db.products.insert([
{ "_id" : 4, "item2" : "almonds", "price" : 12, "quantity" : 2 },
{ "_id" : 3, "item2" : "almonds", "price" : 12, "quantity" : 2 },
{ "_id" : 5, "item2" : "almonds", "price" : 12, "quantity" : 2 },
])
db.inventory.insert([
{ "_id" : 1, "sku" : "almonds", description: "product 1", "instock" : 120 },
{ "_id" : 2, "sku" : "bread", description: "product 2", "instock" : 80 },
{ "_id" : 3, "sku" : "cashews", description: "product 3", "instock" : 60 },
{ "_id" : 4, "sku" : "pecans", description: "product 4", "instock" : 70 },
{ "_id" : 5, "sku": null, description: "Incomplete" },
{ "_id" : 6 }
]);
// 两个表联合查询:
db.orders.aggregate([{
$lookup:{
from:'inventory',
localField: "item",// orders中 item 字段
foreignField: "sku", // inventory中sku
//如果 item==sku 输出 orders 中文档对象
as: "inventory_docs" // inventory 的别名 inventory_docs 作用是;存放从inventory 集合中查询到数据的结果。
},
}
}])
// 根据inventory 中 item字段 查询orders中sku == item的数据
// 三表联合查询
db.orders.aggregate([
{
$lookup:
{
from: "inventory",
localField: "item",
foreignField: "sku",
as: "inventory_docs"
},
{
$lookup:
{
from: "products",
localField: "item",
foreignField: "item2",
as: "products_docs"
}
}
}
]);
mongoDB 关系 (拓展)
mongoDB 关系:是集合与集合之间的关系;也就是集合与集合的联合查询。就是 数组与数组中间的联合查询
一个集合一个数组,如果有分组就会形成多个组
分类:
- 1 对 1 就是一个数组 对应 另一个数组
- 1 对 N 一个数组对象多个数组
- N 对 1 多个数组对应一个数组 (根据多个数组中字段;去查询一个数组中字段)
- N 对 N 多个数组对应多个数组