mongoose中利用populate處理嵌套的方法
前言
nodejs在使用mongdb數(shù)據(jù)庫中經(jīng)常會使用到嵌套,比如一個(gè)多級分類等。這里我使用學(xué)校-->學(xué)院-->學(xué)生來展示使用populate處理嵌套。
定義modal
在模式中,我們需要使用Schema.ObjectId來表示要指向數(shù)據(jù)在mongodb數(shù)據(jù)庫中的_id。
學(xué)校
在學(xué)校的Schema中,colleges屬性是要包含的學(xué)院的_id屬性數(shù)組。
var SchoolSchema = new Schema({
name: String,
colleges: [{
type: Schema.ObjectId,
ref: 'College'
}],
createTime: {
type: Date,
default: Date.now()
}
});
var School = mongoose.model('School', SchoolSchema);
學(xué)院
var CollegeSchema = new Schema({
name: String,
students: [{
type: Schema.ObjectId,
ref: 'Student'
}],
createTime: {
type: Date,
default: Date.now()
}
});
var College = mongoose.model('College', CollegeSchema);
學(xué)生
var StudentSchema = new Schema({
name: String,
sex: String,
age: Number,
createTime: {
type: Date,
default: Date.now()
}
});
var Student = mongoose.model('Student', StudentSchema);
查找
直接查找
查找學(xué)校并找到指向的學(xué)院
School
.find()
.populate('colleges', ['_id','name'])
.exec((err, schools) => {
if (err) {
console.log(err)
}
console.log(schools)
})
populate的第一個(gè)參數(shù)是學(xué)校表中需要指向?qū)W院表的屬性,即colleges;第二個(gè)參數(shù)為要在學(xué)院中查找的屬性。如果不填寫第二個(gè)參數(shù),則默認(rèn)全都查出。
這樣查找出的結(jié)果中,學(xué)院的學(xué)生屬性是該學(xué)院包含的學(xué)生的_id屬性。如果需要都查找出來需要使用嵌套populate。
嵌套
School
.find()
.populate({
path: 'colleges',
select: ['_id', 'name'],
// model: 'College',
populate: {
path: 'students',
select: ['_id', 'name']
// model: 'Student'
}
})
.sort({
createTime: -1
}).exec(function(err, schools) {
if (err) {
console.log(err)
}
});
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Node.js內(nèi)置模塊events事件監(jiān)聽發(fā)射詳解
這篇文章主要為大家介紹了Node.js內(nèi)置模塊events事件監(jiān)聽發(fā)射詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Node.js 多線程實(shí)戰(zhàn)小結(jié)
在?Node.js?的世界中,多線程技術(shù)一直是一個(gè)受到廣泛關(guān)注的領(lǐng)域,本文主要介紹了Node.js 多線程實(shí)戰(zhàn)小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
node.js中的buffer.Buffer.isBuffer方法使用說明
這篇文章主要介紹了node.js中的buffer.Buffer.isBuffer方法使用說明,本文介紹了buffer.Buffer.isBuffer的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
Mac OS X 系統(tǒng)下安裝和部署Egret引擎開發(fā)環(huán)境
之前的文章,我們已經(jīng)介紹了Windows 系統(tǒng)下安裝和部署Egret的開發(fā)環(huán)境,那么,這篇文檔中,我們主要介紹在Mac環(huán)境中安裝Egret以及部署2014-09-09
使用Node.js制作圖片上傳服務(wù)的詳細(xì)教程
在現(xiàn)代 Web 應(yīng)用開發(fā)中,圖片上傳是一項(xiàng)常見且重要的功能,借助 Node.js 強(qiáng)大的生態(tài)系統(tǒng),我們可以輕松搭建高效的圖片上傳服務(wù),本文將深入探討如何使用 Node.js 構(gòu)建一個(gè)功能完備的圖片上傳服務(wù),需要的朋友可以參考下2025-04-04
nodejs使用express創(chuàng)建一個(gè)簡單web應(yīng)用
這篇文章主要介紹了nodejs使用express創(chuàng)建一個(gè)簡單web應(yīng)用的相關(guān)資料,需要的朋友可以參考下2017-03-03
一個(gè)簡單的node.js界面實(shí)現(xiàn)方法
今天小編就為大家分享一篇一個(gè)簡單的node.js界面實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06

