Я пытаюсь ссылаться на одну модель в другую с Mongoose делает это:MongoDB ссылка используя Mongoose
// продукт модель
var productSchema = new mongoose.Schema({
id: {type: Number, unique: true, required: 'product_id'},
sku: {type: String, unique: true, required: 'product_sku'},
name: {type: String, required: 'product_name'},
short_description: {type: String},
details: [{
type: String
}],
categories: [{
type: String
}, {min: 1, max: 5}],
});
module.exports = mongoose.model('products', productSchema);
// модель заказа
var orderSchema = new mongoose.Schema({
id: {type: String, unique: true},
date: {type: Date, default: Date.now},
products_sold: {type: mongoose.Schema.Types.ObjectId, ref: 'products'},
});
module.exports = mongoose.model('orders', orderSchema);
Я ve уже создал продукт с идентификатором: 1:
"_id": ObjectId('55a1ce54b058d142051ca61d'),
"id": 1,
"sku": "p0001",
"name": "test1",
"short_description": "test",
//etc
Если я:
var newOrder = new Order({
id: 'order001',
products_sold: 1,
//etc
});
newOrder.save(function(err, data) {
if(err){
console.log(err);
}else{
console.log(data);
}
});
Он с ошибкой:
message: 'orders validation failed',
name: 'ValidationError',
errors:
{ products_sold:
{ [CastError: Cast to ObjectID failed for value "1" at path "products_sold"]
Как я products_sold в моем заказе заполнен данными продукта, который имеет идентификатор 1?
Заранее спасибо
Я понимаю, но я не знаю, как его реализовать, не могли бы вы привести мне пример? – mdv
@mdv Вам ** нужно ** отдельное поле 'id' для продукта, или вы просто указываете произвольный' id' для каждого продукта? Я дам вам ответ о том, как это сделать, но зависит от того, нужно ли вам это дополнительное поле 'id', или, если это просто произвольное число, нормально ли вам использовать уникальное поле' _id', созданное Mongo ? –
Я использую поле «id», потому что не хватает знаний о монго-моделях, если я использую поле _id, я не могу вручную указать идентификатор для продуктов, какой из них лучше? как я могу получить данные, если я не знаю поле _id. Спасибо Matthew – mdv