我正在尝试用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);
我已经创建了一个ID为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"]
我如何在订单中填充有ID为1的产品数据的products_sold?
提前致谢
您正在指定该products_sold
字段的类型为ObjectId,但是您尝试将a设置Number
为其值。为了_id
将对文档的引用存储在其他集合中,必须存储所引用文档的,而不是架构中具有的任意id字段。您可能需要_id
在产品数据库中更改其类型以使用整数(然后在创建新产品时手动指定_id字段的值),或者需要将产品的_id
值存储在订单文档的product_sold
字段中。
对评论的回应:
这是用于指定您自己的唯一_id
字段的更新代码:
产品型号
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: [String],
categories: [{
type: String
min: 1,
max: 5
}],
}, {_id: false});
module.exports = mongoose.model('products', productSchema);
在productSchema中,您将看到有一个_id
指定的,并将其设置为required
,并且没有任何default
值。这应该使Mongo可以使用Number
您指定的任何内容,因为它是_id。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句