2014-10-17 2 views
0

Im пытается создать схему FoodItem, в которой я сохранил measureUnit как ссылку на объект из модели другой страницы.Невозможно сделать populate in mongoose return null

Это MeasureTypesSchema, где присутствует measureUnit. MeasureTypes - это встроенный документ внутри MetricsSchema. Я экспортирую как модель MeasureTypesSchema (MeasureTypes), так и модель MetricsSchema (метрики).

var mongoose = require('mongoose'); 
Schema = mongoose.Schema; 

var MeasureTypesSchema = new mongoose.Schema({     
measureUnit:{type:String,required:true},     
code:{type:String,required:true}       

}); 
var MeasureTypes = mongoose.model('MeasureTypes', MeasureTypesSchema); 
module.exports = MeasureTypes; 



var MetricsSchema = new mongoose.Schema({      
organisation:{type: Schema.Types.ObjectId, ref: 'Organisation'}, 
MeasureTypes:[MeasureTypesSchema] 

}); 
var Metrics = mongoose.model('Metrics', MetricsSchema); 
module.exports = Metrics; 

Это FoodItemSchema, где я держал measureUnit в качестве ссылки на объект из MeasureTypes модели, присутствующей в другой странице

var mongoose = require('mongoose'); 
Schema = mongoose.Schema; 

var FoodItemSchema = new mongoose.Schema({ 

measureUnit:{type: Schema.Types.ObjectId, ref:'MeasureTypes',required:true},   

}); 

var FoodItem = mongoose.model('FoodItem', FoodItemSchema); 
module.exports = FoodItem; 

Мне нужно, чтобы получить подробную информацию о measureUnit, когда я заполнить, как заполнить, так что я получить детали measureUnit.

ответ

0

Это звучит так, как будто ваши модели разбросаны по разным файлам. В принципе это прекрасно, но вся модель должна быть объединена, чтобы все приложение имело к ней доступ.

В приложениях основной файл (обычно app.js) вы приносите в вашем соединении с базой данных и модели

var db = require('./model/db') 

В /model/db.js вы можете подключиться к базе данных и импортировать несколько файлов схем:

// Bring Mongoose into the app 
var mongoose = require('mongoose'); 

// Build the connection string 
var dbURI = 'mongodb://localhost/ConnectionTest'; 

// Create the database connection 
mongoose.connect(dbURI); 

// BRING IN YOUR SCHEMAS & MODELS 
// For example 
require('./metrics'); 
require('./fooditems'); 

В каждом из файлов схемы вам требуется Мангуст, определить свои схемы и построить модель, например:

var mongoose = require('mongoose'); 

var MeasureTypesSchema = new mongoose.Schema({     
    measureUnit:{type:String,required:true},     
    code:{type:String,required:true}       
}); 

mongoose.model('MeasureTypes', MeasureTypesSchema); 

Я не пробовал определять ссылочные схемы в отдельных файлах; если это продолжает вызывать проблемы, я бы поставил их все в один файл.

Наконец, на страницах, которые вы хотите использовать ваши модели, требуется Mongoose и импортируйте модель снова.

var mongoose = require('mongoose'), 
    MeasureTypes = mongoose.model('MeasureTypes'); 

Для получения дополнительной информации и фона, посмотрите на моем блоге на Mongoose соединениях и использовании: http://theholmesoffice.com/mongoose-connection-best-practice/

0

Я пробовал заполнять меруУнивет из FoodItem и получил нуль.

FoodItem.findById(foodId).lean().populate({path:'measureUnit'}).exec(function (err, food)       
{ console.log(food);} 

В результате я получил за это заселить является

{ 
"_id": "5440d008b9215ace25587835", 

"measureUnit": null, 

"__v": 0 
}