使用Mongoose更新阵列属性

时间:2018-01-24 14:16:25

标签: javascript angularjs node.js mongodb mean-stack

我正在研究一个MEAN堆栈应用程序,其中我使用以下模式定义了一个模型:

var mappingSchema = new mongoose.Schema({
    MainName: String,
    Addr: String,
    Mapping1: [Schema1],
    Mappings2: [Schema2]
},
{collection : 'Mappings'} 
);

我在UI和Mapping1&上显示所有这些数据Mapping2显示在2个表中,我可以在其中编辑值。我想要做的是,一旦我更新表中的值,我应该在数据库中更新它们。我写了put() api,我以对象的形式获得这两个更新的映射,但无法在数据库中更新它。我尝试使用findAndModify()& findOneAndUpdate()但失败了。 这是Schema1& SCHEMA2:

const Schema1 = new mongoose.Schema({
    Name: String,
    Variable: String
});

const Schema2 = new mongoose.Schema({
    SName: String,
    Provider: String
});

和我的api:

.put(function(req, res){

  var query = {MainName: req.params.mainname};

        var mapp = {Mapping1: req.params.mapping1, Mapping2: req.params.mapping2};

        Mappings.findOneAndUpdate(
            query, 
            {$set:mapp}, 
            {}, 
            function(err, object) {
                if (err){
                    console.warn(err.message);  // returns error if no matching object found
                }else{
                    console.log(object);
                }
            });                
    });

请建议最好更新这两个阵列。

更新: 我试过这个

var mapp = {'Mapping2': req.params.mapping2};

        Mappings.update( query , 
                           mapp , 
                        { },
                        function (err, object) {
                            if (err || !object) {
                                console.log(err);
                                res.json({
                                    status: 400,
                                    message: "Unable to update" + err

                                });
                            } else {
                                return res.json(object);
                            }
                        });

我得到的是this

我的大小为3的数组在Mapping2数组中保存为String。

请帮忙。陷入困境。 :(

1 个答案:

答案 0 :(得分:0)

来自Mongoose's documentation我相信没有必要使用$set。只需传递一个包含要更新的属性的对象:

Mappings.findOneAndUpdate(
      query, 
      mapp,  // Object containing the keys to update
      function(err, object) {...}
 );