课时46
集合之间的关系:
一对多(noe to noe):
比如:人《-----》身份证 老公《-----》老婆
一对多(noe to many):
比如:父母《-----》孩子 用户《-----》物品
多对多(many to many):
比如:老师《------》学生
课时47
一对一 :
以内嵌文档的形式体现,
//一对一
db.aAndb.insert([
{name:"杨过",wife:{name:"小龙女",sex:"女"},sex:"男"},
{name:"杨过",wife:{name:"小龙女",sex:"女"},sex:"男"}
])
db.aAndb.find();
一对多::
通过内嵌文档的形式实现或者通过集合的形式实现
//一对多 比如 微博 和 微博评论
//添加微博
db.weibo.insert([
{weibo:"世界这么大,我想去看看"},
{weibo:"我要做一名web开发者!!!"}
])
db.weibo.find();
添加评论
db.comments.insert([
{
weibo_id: ObjectId("5bdd89e06a5e78f4cfc2b9c8"),
list:[
"那你有钱吗",
"一个人吗??去呢啊??",
"加油!!"
]
},
{
weibo_id: ObjectId("5bdd89e06a5e78f4cfc2b9c9"),
list:[
"那你要学习HTML",
"那还要你要学习css",
"加油!!"
]
}
]);
db.comments.find();
查询一对多
var weibo_id= db.weibo.findOne({"weibo" : "世界这么大,我想去看看"})._id;
db.comments.find({weibo_id: weibo_id});
课时48
多对多的关系:
比如:学生《-------》老师
可以通过多文档关联,
//多对多 老师《------》学生
//插入老师集合
db.teachers.insert([
{
name:"语文老师",
teacher_id: 1,
student_id:[
1001,
1002,
1003
]
},
{
name:"数学老师",
teacher_id: 2,
student_id:[
1001,
1002,
1003
]
},
{
name:"英语老师",
teacher_id: 3,
student_id:[
1001,
1002,
1003
]
}
])
db.teachers.find();
//插入学生集合
db.students.insert([
{
name:"小明",
student_id: 1001,
teacher_id:[
1,
2,
3
]
},
{
name:"小红",
student_id: 1002,
teacher_id:[
1,
2,
3
]
},
{
name:"小刚",
student_id: 1003,
teacher_id:[
1,
2,
3
]
}
])
db.students.find();
db.teachers.find();
课时49
排序和索引:
- 排序:
查询文档时,默认是按照_id的值进行排序的(升序)
sort() 可以用来指定文档的排序规则,sort() 内部需要传递一个对象来指定文档的排序规则 ,其中1表示升序 ,-1表示降序
limit skip sort 的顺序可以任意改变 ,运行时会自动调整。
不希望它默认按照id排序 希望它按照工资来排序
//按照工资升序排列
db.section.find().sort({wages:1});
//优先按照工资升序排列 如果遇到相同的就在 按照id升序排列
db.section.find().sort({wages: 1},{_id: -1});
- 索引:
展示字段中 部分内容
或者是提取这个字段内的部分内容
在查询时 ,可以在第二个参数来设置查询的结果投影
索引: find({ 查询条件 }, { 检索范围(1显示 0隐藏)})
注意:_id
如果不设置默认是1(显示) 可手动隐藏
db.section.find({}, {name: 1});
//只显示name和wages字段
`db.section.find({}, {name: 1, _id: 0, wages: 1});`
a07a1f2945204ef671ddebc28871c00.png
网友评论