MongoDB(芒果数据库)学习(二)———文档间的关系

MongoDB文档间的关系

1、一对一关系(内嵌文档)

一对一关系,就像中国一夫一妻,一个身份证号对应一个人一样,下面我士兵来做例子,每个士兵对应自己有一个技能。
执行完语令我们查看soldier表

db.soldier.insert([
        {
        Name:"霹雳火",
            skill:{
	            skName:"雷霆半月斩"
            }},{
        Name:"龙卷风",
            skill:{
	            skName:"闪电旋风劈"
            }},{
        Name:"冲击波",
            skill:{
	            skName:"绝地流星锤"
            }}
]);

在这里插入图片描述
当进入skill中 会出现skil中的数据,还会自带一个Id
在这里插入图片描述

2、一对多

//装备
db.arms.insert({
    list:["能源紫水晶x5","能源紫水晶x5","小兵x10","专属武器x1"],
    user_id:ObjectId("5e8f0b85e49d3b617265d186")   
});

在这里插入图片描述
在这里插入图片描述
如上图将对应的装备给到对应的机车战士。
我们现在查询指定的人的武器

var findId = db.soldier.findOne({Name:"霹雳火"})._id;
db.arms.find({user_id :findId});

在这里插入图片描述
就可以清楚的看到霹雳火有四个装备,因为没展开,就不看详细数据了。(一对多,多对一基本一个道理)

3、多对多

老师与学生大部分呈现多对多关系,即一个老师可以有多个学生,一个学生可以有多个老师。

db.teachers.insert(
            [{name:"风雪师傅"},
             {name:"闪电师傅"},
             {name:"银白将军师傅"}]
             );

这是一张老师表执行后查询得到
在这里插入图片描述
现在将一张学生表建立

db.stus.insert([
             {name:"龙卷风",
                 tech_id:[ 
                    ObjectId("5e93bad036c618bd4c80cc16"), 
                    ObjectId("5e93bad036c618bd4c80cc17")
                 ]},
             {name:"霹雳火",
                 tech_id:[
                     ObjectId("5e93bad036c618bd4c80cc17"),
                     ObjectId("5e93bad036c618bd4c80cc16")
                 ]
             },
             {name:"黑铁兽",
                 tech_id:[
                     ObjectId("5e93bad036c618bd4c80cc17"),
                     ObjectId("5e93bad036c618bd4c80cc18")
                 ]
             } ]);

然后我们以tree方式查询学生表

db.stus.find();

在这里插入图片描述
我们会发现,龙卷风,和霹雳火都对应了两个师傅。并且这两个师傅又对应了这两个学生,从而达到了,多对多的关系。

4、mongodb,sort和投影

1、小于或大于

这是我们的现有数据
在这里插入图片描述

db.emp.find({$or:[{age:{$lt:18}},{age:{$gt:21}}]});

在这里插入图片描述
如果写成了

db.emp.find({age:[{$lt:18,$gt:21}]});

代表且,小于18且大于21 因此即使运行也会没有数据。

2、查询指定字段

2.1 指定文档排序规则

db.emp.find({}).sort({age:-1,name:1});

以上代码,是进行sort排序,-1降序,1升序。
(还可使用limit,skip,sort)来控制显示数据
在这里插入图片描述
2.2 查询,可以在参数的位置来设置,查询结果的投影

db.emp.find({},{name:1,_id:0,gender:1});

其中1为指定显示,默认id会显示,不想显示则为0,
有声明显示字段后,默认不声明的字段会不显示出来。
在这里插入图片描述

4、结语

大部分IT技术虽然感觉不同,但其实技术都是相通的,不用想着都会,先一步一脚印,玩透一个,再打其他。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值