2016-12-13 4 views
0

В мангустах, в настоящее время я получил 2 схемы первые один деталь продукта и второй один инвентарь и схемы являются в отдельных файлахмангуст Заселите возвращение пустого

ProductDetail Схема

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

var productDetailSchema = new Schema({ 
    ProductID:{type:String,unique:true, require:true}, 
    ProductName:{type:String, require:true}, 
    Spec:String, 
    Price:String, 
    Unit:String, 
    OwnBrand:Boolean, 
    Inventory:{ type: Schema.Types.ObjectId, ref: 'inventoryModel'} 
}, {collection:'products'}); 


module.exports = mongoose.model('productDetailModel', productDetailSchema) 

инвентаризация схема

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

var inventorySchema = new Schema({ 
    product:{ type: Schema.Types.ObjectId, ref: 'productDetailModel' }, 
    stockLevel:Number 
}, {collection:'inventory'}); 

module.exports = mongoose.model('inventoryModel', inventorySchema) 

В этом случае я хотел бы поместить инвентарь stockLevel в productDetail. Как это

{ 
    ProductID:'P701', 
    ProductName:'popcorn', 
    Spec:'Large Pack', 
    Price:'10.00', 
    Unit:'packs' 
    Inventory: 20 
} 

Поэтому я стараюсь использовать метод мангуст заселить

productDetail.findOne({ProductID:'P701'}).populate('Inventory').exec(function(err, doc){ 
    if(err){ 
     console.log(err) 
    }else{ 
     console.log(doc) 
    } 
}) 

Это данные, которые я имею в моей коллекции «Inventory»

{ 
    "_id" : ObjectId("584f663d95dfa29bad337572"), 
    "ProductID": "P701", 
    "StockLevel": "20" 
} 

а данные в сборнике «ProductDetail Collection»

{ 
    _id : ObjectId("584a3cea027c1f62da941acf"), 
    ProductID:'P701', 
    ProductName:'popcorn', 
    Spec:'Large Pack', 
    Price:'10.00', 
    Unit:'packs' 
} 

По какой-то причине ошибки не появляются, но console.log (doc) по-прежнему не содержит никакого инвентаря: stockLevel. Я знаю, что я делаю что-то неправильно, но я понятия не имею, где это. Какую ключевую концепцию мне не хватает, чтобы этот код работал? Заранее спасибо

+0

Можете ли вы показать, как именно вы сохраняете 'inventoryModel' _id в' productDetailModel'? –

+0

Не могли бы вы разместить содержимое в продуктеДетали продукта: 'P701'? Похоже, что вы храните недопустимый инвентарь повторно при сохранении детали продукта. –

ответ

0

Ваш inventory в productDetailModel должен быть ObjectId, из того, что вы здесь показали, является число (т. Е. 20).

{ 
    ProductID:'P701', 
    ProductName:'popcorn', 
    Spec:'Large Pack', 
    Price:'10.00', 
    Unit:'packs' 
    Inventory: 20 
} 

это должно быть так:

Inventory : ObjectId('someId'); 

Вот почему она не заселять, потому что не можете найти ObjectId в 20 в inventoryModel.

EDIT

Этот productDetail документ не имеет поле как inventory. Таким образом, он не может его заполнить.

{ 
    _id : ObjectId("584a3cea027c1f62da941acf"), 
    ProductID:'P701', 
    ProductName:'popcorn', 
    Spec:'Large Pack', 
    Price:'10.00', 
    Unit:'packs' 
} 

Это должно быть что-то вроде этого тоже:

inventory : ObjectId("584f663d95dfa29bad337572");//some `ObjectId` which corresponds to `inventoryModel` document. 

Вы должны создать инвентаризацию field и сохранить ObjectId некоторых инвентаризации документа в productDetail документа при сохранении его, или может быть в то время как его обновления ,

+0

Привет, Рави, я обновил данные по вопросу выше, это то, что вам нужно? – Xylops

+0

Hi Ravi Это, наконец, работает правильно! Большое вам спасибо за помощь. : D – Xylops

+0

Я рад, я мог бы помочь. –

Смежные вопросы