我正在研究一个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);
}
});
我的大小为3的数组在Mapping2数组中保存为String。
请帮忙。陷入困境。 :(
答案 0 :(得分:0)
来自Mongoose's documentation我相信没有必要使用$set
。只需传递一个包含要更新的属性的对象:
Mappings.findOneAndUpdate(
query,
mapp, // Object containing the keys to update
function(err, object) {...}
);