Mongodb實現(xiàn)的關聯(lián)表查詢功能【population方法】
本文實例講述了Mongodb實現(xiàn)的關聯(lián)表查詢功能。分享給大家供大家參考,具體如下:
Population
MongoDB是非關聯(lián)數(shù)據(jù)庫。但是有時候我們還是想引用其它的文檔。這就是population的用武之地。
Population是從其它文檔替換文檔中的特定路徑。我們可以遷移一個單一的文件,多個文件,普通對象,多個普通的對象,或從查詢中返回的所有對象
populate 方法
populate 方法可以用在 document 上、 model 上或者是 query 對象上,這意味著你幾乎可以在任何地方調用這個方法以填充你的引用字段。
當然,populate 方法在不同對象上參數(shù)不大一樣,但是都接收一個option的參數(shù),你可以用這些參數(shù)指定:
語法:Query.populate(path, [select], [model], [match], [options])
path:以空格分隔的引用字段的名稱 String 或 Object類型,
String 類型的時, 指定要填充的關聯(lián)字段,要填充多個關聯(lián)字段可以以空格分隔。
Object 類型的時,就是把 populate 的參數(shù)封裝到一個對象里。當然也可以是個數(shù)組
select: Object 或 String ,可選,指定填充 document 中的哪些字段。
Object 類型的時,格式如: {name: 1, _id: 0} ,為 0 表示不填充,為 1 時表示填充。
String 類型的時,格式如: "name -_id" ,用空格分隔字段,在字段名前加上 -表示不填充。詳細語法介紹 query-select
match: 可選,指定附加的查詢條件
model: 可選,指定關聯(lián)字段的 model,如果沒有指定就會使用 Schema的 ref
options: Object 可選,指定附加的其他查詢選項,如排序以及條數(shù)限制等等
引用字段的類型
目前,Mongoose 只支持以下幾種引用字段的類型:
ObjectId
Number
String
Buffer
而且自然而然,引用 document 的主鍵類型必須和引用字段類型相對應。在生產環(huán)境中,推薦主鍵類型和引用類型都使用 ObjectId ,一是因為 ObjectId 不包含業(yè)務含義,二是 ObjectId 不大可能重復,三是因為 Mongoose 默認生成的主鍵類型就是 ObjectId ,可以減少很多配置的操作。
例子
Scheme先定義好,關聯(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,這里對應寫String ref:'A' } },{collection: 'b'}); module.exports = mongoose.model('B', CountSchema);
關聯(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()
更多相關內容還可參考:http://mongoosejs.com/docs/api.html#model_Model.populate
希望本文所述對大家MongoDB數(shù)據(jù)庫程序設計有所幫助。
相關文章
使用命令方式安裝MongoDB指南(Windows、Linux)
這篇文章主要介紹了使用命令方式安裝MongoDB指南,本文分別介紹Windows、Linux下使用命令的方式安裝mongodb,需要的朋友可以參考下2015-04-04MongoDB的聚合框架Aggregation Framework入門學習教程
MongoDB中的聚合aggregate主要用于處理數(shù)據(jù)計算,這里我們就來詳細整理MongoDB的聚合框架Aggregation Framework入門學習教程,需要的朋友可以參考下2016-07-07centos7安裝mongo數(shù)據(jù)庫的方法(mongo4.2.8)
這篇文章給大家介紹了centos7安裝mongo4.2.8數(shù)據(jù)庫的詳細過程,包括mongo數(shù)據(jù)庫安裝和啟動方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2022-01-01MongoDB快速入門筆記(一)之windows下安裝MongoDB方法
MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫。本文重點給大家介紹MongoDB快速入門筆記(一)之windows下安裝MongoDB方法,非常不錯具有參考借鑒價值,感興趣的朋友一起看下吧2016-06-06MongoDB運行狀態(tài)監(jiān)控、性能分析工具mongostat詳解
這篇文章主要介紹了MongoDB運行狀態(tài)監(jiān)控、性能分析工具mongostat詳解,mongostat是mongdb自帶的狀態(tài)檢測工具,在命令行下使用,它會間隔固定時間獲取mongodb的當前運行狀態(tài),并輸出,本文詳細講解了它的使用,需要的朋友可以參考下2015-07-07MongoDB快速入門筆記(四)之MongoDB查詢文檔操作實例代碼
MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。接下來通過本文給大家介紹MongoDB快速入門筆記(四)之MongoDB查詢文檔操作實例代碼,感興趣的朋友一起學習吧2016-06-06