Mongodb實(shí)現(xiàn)的關(guān)聯(lián)表查詢功能【population方法】
本文實(shí)例講述了Mongodb實(shí)現(xiàn)的關(guān)聯(lián)表查詢功能。分享給大家供大家參考,具體如下:
Population
MongoDB是非關(guān)聯(lián)數(shù)據(jù)庫。但是有時(shí)候我們還是想引用其它的文檔。這就是population的用武之地。
Population是從其它文檔替換文檔中的特定路徑。我們可以遷移一個(gè)單一的文件,多個(gè)文件,普通對象,多個(gè)普通的對象,或從查詢中返回的所有對象
populate 方法
populate 方法可以用在 document 上、 model 上或者是 query 對象上,這意味著你幾乎可以在任何地方調(diào)用這個(gè)方法以填充你的引用字段。
當(dāng)然,populate 方法在不同對象上參數(shù)不大一樣,但是都接收一個(gè)option的參數(shù),你可以用這些參數(shù)指定:
語法:Query.populate(path, [select], [model], [match], [options])
path:以空格分隔的引用字段的名稱 String 或 Object類型,
String 類型的時(shí), 指定要填充的關(guān)聯(lián)字段,要填充多個(gè)關(guān)聯(lián)字段可以以空格分隔。
Object 類型的時(shí),就是把 populate 的參數(shù)封裝到一個(gè)對象里。當(dāng)然也可以是個(gè)數(shù)組
select: Object 或 String ,可選,指定填充 document 中的哪些字段。
Object 類型的時(shí),格式如: {name: 1, _id: 0} ,為 0 表示不填充,為 1 時(shí)表示填充。
String 類型的時(shí),格式如: "name -_id" ,用空格分隔字段,在字段名前加上 -表示不填充。詳細(xì)語法介紹 query-select
match: 可選,指定附加的查詢條件
model: 可選,指定關(guān)聯(lián)字段的 model,如果沒有指定就會使用 Schema的 ref
options: Object 可選,指定附加的其他查詢選項(xiàng),如排序以及條數(shù)限制等等
引用字段的類型
目前,Mongoose 只支持以下幾種引用字段的類型:
ObjectId
Number
String
Buffer
而且自然而然,引用 document 的主鍵類型必須和引用字段類型相對應(yīng)。在生產(chǎn)環(huán)境中,推薦主鍵類型和引用類型都使用 ObjectId ,一是因?yàn)?ObjectId 不包含業(yè)務(wù)含義,二是 ObjectId 不大可能重復(fù),三是因?yàn)?Mongoose 默認(rèn)生成的主鍵類型就是 ObjectId ,可以減少很多配置的操作。
例子
Scheme先定義好,關(guān)聯(lián)屬性
AScheme:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var AScheme= new Schema({
name: {
type: String,
default: ''
}
},{collection: 'a'});
module.exports = mongoose.model('A', CountSchema);
BScheme:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var BScheme= new Schema({
name: {
type: String,
default: ''
},
age:{
type:Number
}
aid: {
type: mongoose.Schema.ObjectId,//如果AScheme的_id type為String,這里對應(yīng)寫String
ref:'A'
}
},{collection: 'b'});
module.exports = mongoose.model('B', CountSchema);
關(guān)聯(lián)查詢
AModel.find().populate({path: 'aid', select: {name: 1,_id:0}}).exec(function(err, a) {
if (err) res.send(err);
console.log(a);
});
//
AModel.find(...).populate({ path: 'aid', match: { age: { $gte: 21 }}, select: 'name -_id', options: { limit: 5 } }) .exec()
更多相關(guān)內(nèi)容還可參考:http://mongoosejs.com/docs/api.html#model_Model.populate
希望本文所述對大家MongoDB數(shù)據(jù)庫程序設(shè)計(jì)有所幫助。
相關(guān)文章
MongoDB快速入門筆記(六)之MongoDB刪除文檔操作
這篇文章主要介紹了MongoDB快速入門筆記(六)之MongoDB刪除文檔操作 的相關(guān)資料,需要的朋友可以參考下2016-06-06
將MongoDB加入到Windows的本地服務(wù)項(xiàng)的方法
下面主要針對MongoDB在Windows下加入本地服務(wù)項(xiàng)做一些簡單的分享。以方便剛接觸MongoDB并在Windows環(huán)境下進(jìn)行開發(fā)的同學(xué)2014-08-08
詳解Mongodb?多文檔聚合操作處理方法(Map-reduce?函數(shù))
這篇文章主要介紹了Mongodb多文檔聚合操作處理方法(Map-reduce函數(shù)),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
Ubuntu中安裝MongoDB及執(zhí)行一些簡單操作筆記
這篇文章主要介紹了Ubuntu中安裝MongoDB及執(zhí)行一些簡單操作筆記,本文同時(shí)給出了查看已有數(shù)據(jù)庫、刪除數(shù)據(jù)庫、創(chuàng)建數(shù)據(jù)庫等操作命令實(shí)例,需要的朋友可以參考下2014-09-09
windows安裝mongodb6.x并設(shè)置用戶名密碼的詳細(xì)過程
這篇文章主要介紹了windows安裝mongodb6.x并設(shè)置用戶名密碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
淺談MySQL和MariaDB區(qū)別(mariadb和mysql的性能比較)
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品2018-02-02
MongoDB學(xué)習(xí)之Text Search文本搜索功能
這篇文章主要給大家介紹了MongoDB之Text Search文本搜索功能的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05

