在我的集合架构中,我的代码如下
Product.js
var mongoose = require('mongoose');
var ProductSchema = new Schema({
name : String,
id : String,
price : Number
});
mongoose.model('Product', ProductSchema);
WishList.js
var mongoose = require('mongoose');
var WishListSchema = new Schema({
customer : String,
products: {
type: [{
type: Schema.ObjectId,
ref: 'Product'
}]
},
billAmount : Number
});
WishListSchema.methods = {
addProduct: function(_product) {
var deferred = q.defer();
var Product= mongoose.model('Product');
var self = this;
var product = new Product(_product);
product.save(function(err) {
console.log(err);
if (err) {
return deferred.reject(err);
} else {
self.update({
$push: {
products : product
}
}, function(err) {
if (err) {
return deferred.reject(err);
} else {
return deferred.resolve();
}
});
}
});
return deferred.promise;
}
};
mongoose.model('WishList', WishListSchema);
APIrouteDefintion.js
app.post('/api/order/:orderId/addToCart',auth.requiresLogin,controller.addProduct);
当我以这种方式调用addProduct函数时,我在wishList下更新了我的产品ID,但没有更新名称和价格。请让我知道我错在哪里。
答案 0 :(得分:1)
正在发生的事情是Mongoose的正常行为,添加到wishlist的id是对产品文档的引用。
如果您想要返回产品的名称和价格,您必须在您的愿望清单中添加静电,例如:
WishListSchema.statics.load = function(id,cb){ this.findOne({ _id:id 填充('产品','名称价格')。exec(cb); };
但请不要在引用材料附近引用我。但是你当前的结果是正常的,即:只有id返回",你想要什么,即"名称和价格是一个附加功能"。
为了确保自己查看Mongo数据库中的文档,您将看到只存储了id。
e.g。 "产品":{ #&34; $ OID":" 53110db1edf8384039ed0bb5" }