一、文档之间的关系
1、一对一(One to One)
- 如夫妻(一个妻子 对应 一个丈夫)
- 在MongoDB中可以通过内嵌文档的形式来体现出一对一的关系
db.WifeAndHusband.insert(
{wife:"小汐",
husband:{name:"晓龙"}
},
{wife:"小青",
husband:{name:"小富"}
}
);
db.WifeAndHusband.find();
2、一对多(One to Many)/ 多对一(Many to One)
- 父母 对应 多个孩子 ;用户 对应 多个订单;文章 对应 多个评论
- 也可以使用内嵌文档来映射一对多的关系
-
/*用户users 和 订单orders*/ db.users.insert([ {username:"小皮球"}, {username:"大关关"} ]); db.users.find(); db.orders.insert( { list:["辣椒","花椒","油"], userId:ObjectId("5b4dba54d9152b29b71913f1") } ); db.orders.find(); /*查找用户小皮球的订单*/ var user_id = db.users.findOne({username:"小皮球"})._id; db.orders.find({userId:user_id});
3、多对多(Many to Many)
- 分类 — 商品;老师 — 学生
/*老师、学生*/
db.teachers.insert([
{name:"Jack"},
{name:"Mike"},
{name:"bluce"}
]);
db.teachers.find();
db.studs.insert([
{name:"郭靖",
teacherIds:[
ObjectId("5b4dc529090e87579f7c472c"),
ObjectId("5b4dc529090e87579f7c472d")
]
},
{name:"灰太狼",
teacherIds:[
ObjectId("5b4dc529090e87579f7c472c"),
ObjectId("5b4dc529090e87579f7c472d"),
ObjectId("5b4dc529090e87579f7c472e")
]
}
]);
db.studs.find();
实例:
//27.查询工资小于2000的员工
db.emp.find({sal:{$lt:2000}})
//28.查询工资在1000-2000之间的员工
db.emp.find({sal:{$lt:2000,$gt:1000}})
//29.查询工资小于1000或大于2500的员工
db.emp.find({$or:[{sal:{$gt:2500}},{sal:{$lt:1000}}]});
//30.查询财务部的所有员工
var dept_no = db.dept.findOne({dname:"财务部"}).deptno;
db.emp.find({depno:dept_no});
//31.查询销售部的所有员工
var dept_no = db.dept.findOne({dname:"销售部"}).deptno;
db.emp.find({depno:dept_no});
//32.查询所有mgr为7698的所有员工
db.emp.find({mgr:7698})
//33.为所有薪资低于1000的员工增加工资400元
db.emp.updateMany({sal:{$lt:1000}},{$inc:{sal:400}})
二、关于_sort和投影
查询文档的时候,默认是按照id的值进行排序(升序)。
1、可以用sort( )指定排序的规则
db.集合名.find().sort({排序字段:1});#1升序
db.集合名.find().sort({排序字段:-1});#-1降序
例
db.emp.find().sort({sal:1});
注意:MongoDB中skip、sort、limt可以按照任意顺序进行调用。
2、查询时可以在第二个参数位置设置查询结果的 投影(想显示的字段)
db.集合名.find({},{想要显示的字段:1});#1显示
db.集合名.find({},{想要显示的字段:0});#0不显示
例
db.emp.find({},{sal:1});