未分类

关于在mongoose中填充外键的方法详解_node.js_脚本之家

22 3月 , 2020  

外键援引

var mongoose = require, Schema = mongoose.Schema var personSchema = Schema({ // _id默认为Schema.Types.ObjectId类型 _id : Number, name : String});var storySchema = Schema({ creator : { type: Number, ref: 'Person' }, title : String, // 可以看到外键引用可以定义在嵌套的属性中。 fans : [{ type: Number, ref: 'Person' }]});var Story = mongoose.model;var Person = mongoose.model('Person', personSchema);

.populate()的同一时间,还足以钦赐过滤器以至约束大小。
.populate()的参数换为三个指标就可以。

var user = { name: 'Indiana Jones', weapon: 389 };User.populate(user, { path: 'weapon', model: 'Weapon' }, function  { console.log;

注意:五光十色填充和嵌套属性填充的分别。借使是填充属性的属性
则只要求用.分隔,比方:.populate

动态引用

Story.find .populate({ path: 'fans', match: { age: { $gte: 21 }}, select: 'name', options: { limit: 5 } }); .exec();

上述查询只会挑选年龄当先21的fans,只回去其name字段,且最多再次回到5个。

MongoDB是名列前茅的NoSQL数据库,由此不提供JOIN操作。
但临时大家仍然期望援引别的集合中的文书档案。那时候便需求外键填充。
mongoose是极具JavaScript特点的程序库,提供了极端简约和强硬的填写作用。
mongoose不仅仅支持填充单个文书档案,也支持多文书档案,以至直接填充某些对象。

想填充引用的引用怎么做?给.populate()盛传嵌套的参数就能够。
比方填充客户的爱侣的爱侣:

填充多少个属性

填充选项

上文中调用.populate()早先有二个规格:被填充的字段已棉被服装置过ref选项。
mongoose会去ref钦点的集结中去搜索对应ID。
借使是动态字段怎么做?能够在填充的还要钦赐其ref:

直白选拔相应Schema

铺天盖地填充

mongoose会暗中同意使用当前Schema对应的MongoDB的集合。

MongoDB

设置populate的model参数

var alice = new Person({ _id: 0, name: 'Alice'});# 保存其ID即可var story = new Story({ title: 'xx', creator: alice._id });Story.findOne .populate .exec{ if throw err; console.log; });
var userSchema = new Schema({ name: String, friends: [{ type: ObjectId, ref: 'User' }]});User. findOne. populate({ path: 'friends', populate: { path: 'friends' } });

关于在mongoose中填充外键的方法详解_node.js_脚本之家。随机对象填充

保存与填充

填充援引数组与填充单个引用的语法未有区分,mongoose会识别字段类型的例外。

Story.findOne .populate // 只返回Person的name字段 .exec{ if throw err; console.log; });

mongoose不仅可以够填充Query中的对象,还是能够填充当何对象。
当然那时候就须求钦定用哪些模型来填充,有两种艺术来钦赐填充模型。

Story中保存Person对象的_id,此后在Query上调用.populate()就能够用Person的文书档案来替换掉原本的字段。

Story.find .populate .exec .populate .populate;

总结

正文中有个别代码来自mongoose文书档案。

var userSchema = new Schema({ _id: Number, name: String, teacher: Number});User. findOne. populate({ path: 'teacher', model: 'User' // 在User集合中查找该ID })

不常候大家只想要少之甚少的多少个字段,那能够用字段名语法来钦定它们。

总体的选项请访问:

填充内定的字段

在Schema字段的概念中,能够加多ref属性来指向另贰个Schema。
该ref属性在现在被填充时将被mongoose读取。
上面是存在彼此援引的Person与Story的Schema定义。

直白运用Weapon来填充该项目标习性,则没有必要设置model字段:

奇迹大家必要填写三个字段,那时能够屡次调用.populate()
也得以在一遍调用中内定多少个字段:

外键的品类能够是ObjectId, Number, String,
Buffer中此外一种,在赋值与填充时保持一致即可。

var user = { name: 'Indiana Jones', weapon: 389 };Weapon.populate(user, { path: 'weapon' }, function  { console.log;

与动态填充近似,填充时能够平昔设置model参数。
那时候用随便七个Schema都足以操作,例如User:

本文主要给大家介绍的是有关mongoose中填充外键的相干内容,分享出去供大家参照他事他说加以考察学习,上面话非常少说了,来协同拜望详细的牵线:

上述便是那篇小说的全体内容了,希望本文的剧情对大家的读书可能干活能拉动一定的拔刀相助,假诺有疑难大家能够留言交换,多谢我们对台本之家的支撑。


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图