使用mongoose从angular js api更新集合

时间:2014-03-11 04:56:50

标签: angularjs mongoose

在我的集合架构中,我的代码如下

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,但没有更新名称和价格。请让我知道我错在哪里。

1 个答案:

答案 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"   }