就像您在此代码中看到的那样,我想创建一个经典应用来注册属于用户的用户,产品和订单。
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/orders');
var Schema = mongoose.Schema;
var ObjectId = Schema.Types.ObjectId;
var ProductSchema = Schema({
code: String,
name: String,
description: String
});
var Product = mongoose.model('Product', ProductSchema);
var OrderSchema = Schema({
user: {type: ObjectId, ref:'User'},
products: [{
product: {type: ObjectId, ref: 'Product'},
quantity: {type: Number}
}]
});
var Order = mongoose.model('Order', OrderSchema);
var UserSchema = Schema({
name: String,
email: String,
orders: [{type: ObjectId, ref: 'Order'}]
});
var User = mongoose.model('User', UserSchema);
/ *我将代码分成4个步骤,试图让它更容易测试。对于每个测试,我必须设置步骤,然后再次执行文件。 node testfile.js * /
var step = 1;
//在这里我创建产品并保存。
if(step == 1){
var product1 = new Product({
code: '001',
name: 'somename1',
description: 'some description 1'
});
product1.save(function(e, product1){
if(!e){
console.log('Product 1 saved.');
}
});
var product2 = new Product({
code: '002',
name: 'somename2',
description: 'some description 2'
});
product2.save(function(e, product2){
if(!e){
console.log('Product 2 saved.');
}
});
}else if(step == 2){
//我在这里创建客户
// Creating the customer
var Customer = new User({
name: 'Erick',
email: 'myemail@dot.com'
});
Customer.save(function(e, customer){
if(!e){
console.log('Customer '+customer.name+' saved.');
}
});
}else if(step ==3){
/ *我在这里创建订单,然后搜索产品并将它们添加到订单中,我不知道这是否正确,如果有人能以正确的方式向我解释我会感激* /
// Creating the order for the user Erick
User.findOne({name: 'Erick'}, function(e, user){
if(!e){
var ord = new Order({
user: user._id
});
// Adding the first product
Product.findOne({code: '001'}, function(e, productc1){
if(!e){
ord.products.push({product: productc1._id, quantity: 2});
// Adding the second product
Product.findOne({code: '002'}, function(er, productc2){
if(!er){
ord.products.push({product: productc2._id, quantity: 3});
//console.log(ord);
// Now saving the order
ord.save(function(err, ord){
if(!err){
console.log('Order saved.');
// now i add the push the order to the user
user.orders.push(ord._id);
user.save(function(errr, usr){
if(!errr){
console.log('Order Added to the user');
console.log(usr);
}
})
}
})
}
});
}
});
};
});
}else if(step == 4){
/ * 在这里,我试图让用户获得他的订单,并使用属于的项目填充每个订单,但当我尝试“populate('orders.products.product')”我收到错误“TypeError:CAn not call method”path '未定义。
我应该如何填充?
* /
User.findOne({name: 'Erick'}).populate('orders').exec(function(e, erick){
if(!e){
console.log(erick);
}
});
}