集合之间的关系: 一对多(noe to noe): 比如:人《-----》身份证 老公《-----》老婆 一对多(noe to many): 比如:父母《-----》孩子 用户《-----》物品 多对多(many to many): 比如:老师《------》学生
一对一 : 以内嵌文档的形式体现,
//一对一
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});
多对多的关系: 比如:学生《-------》老师 可以通过多文档关联,
//多对多 老师《------》学生
//插入老师集合
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();
排序和索引:
- 排序: 查询文档时,默认是按照_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});`