我有2個模式:客戶和地址。由於其他原因,地址架構必須先註冊。 如何在地址架構中的靜態內的客戶表上執行查詢?貓鼬工作到沒有模式註冊
我想我需要訪問原始mongo驅動程序並使用它執行查詢 - 我不需要任何特殊的Mongoose驗證/中間件,因此這不是問題。
如何使用Customer模型中的本機驅動程序訪問Address表?還是有一種純粹的貓鼬做這種做法?請注意,O不想在Customer表中創建用於處理和使用總體的參考。
我有2個模式:客戶和地址。由於其他原因,地址架構必須先註冊。 如何在地址架構中的靜態內的客戶表上執行查詢?貓鼬工作到沒有模式註冊
我想我需要訪問原始mongo驅動程序並使用它執行查詢 - 我不需要任何特殊的Mongoose驗證/中間件,因此這不是問題。
如何使用Customer模型中的本機驅動程序訪問Address表?還是有一種純粹的貓鼬做這種做法?請注意,O不想在Customer表中創建用於處理和使用總體的參考。
您只需要從customer.js模型訪問Address模型。
//Customer.js
var Address = require('./models/Address');
CustomerSchema = new mongoose.Schema({
addresses: [{type: mongoose.Schema.ObjectId, ref:'Address'}]
});
CustomerSchema.statics.getAddressById = function getAddressById (id, next) {
Customer.findOne({_id: id}, function (err, customer) {
if (err || !customer) {
return next(err || new Error('Customer not found with id' + id));
}
Address.find({_id: {$in : customer.addresses}}, next);
});
}
var Customer = db.model('Customer', CustomerSchema);
module.exports = Customer;
我假設您的客戶架構有一個addresses
密鑰,它是一組地址。如果情況並非如此,請隨時將其更改爲單個地址。
地址架構還沒有註冊(即沒有db.model('地址',地址。我一次加載一次註冊所有模式,因爲你只能需要一次模型。這也不是一個參考問題。只是試圖避免只是爲了調用另一個模型而在模型中包裝了一個包裝,但我可能需要 – cyberwombat 2015-02-07 02:02:48
您可以根據需要隨意調用模型,節點緩存它的需求,因此它不會每隔一次就重新實例化一個新模型你需要它的時候需要Address寄存器Address模型如果你不想使用它,使用mongodb本地驅動程序,並執行db.addresses.find({_ id:{$ in:customer.addresses})} – 2015-02-07 02:09:24
這是一個最近的變化嗎?過去的Mongoose沒有允許這樣做 - 創建多個註冊問題,爲了避免無盡的錯誤,我必須將所有的貓鼬模型加載到一個地方,這是一個衆所周知的問題,例如:http: //stackoverflow.com/questions/17277683/call-require-on-mongoos e-model-more-once – cyberwombat 2015-02-07 02:14:59
好的。我能夠通過更改我撥打var Customer = mongoose.model('Customer')
電話的位置來解決我的問題。將其放在我的Address模型的頂部並與其他所有需要一起導致模式註冊錯誤。但把它放在靜態方法裏面的確有竅門。
所以:
AddressSchema.statics.myMethod = function() {
var Customer = mongoose.model('Customer');
一般地址將被包含在客戶文件內。沒有必要引用不同的文檔,這不是一個SQL數據庫。 – 2015-02-07 00:43:52
我不是要求連接或模式佈局 - 我需要調用另一個模式,由於技術原因,不能先註冊。 – cyberwombat 2015-02-07 01:05:35