以角度(mongoose/mongodb)更新模型,特别是作为模型属性的对象数组
Posted
技术标签:
【中文标题】以角度(mongoose/mongodb)更新模型,特别是作为模型属性的对象数组【英文标题】:Updating a model in anguler (mongoose/mongodb) specifically an array of objects that is an attribute of the model 【发布时间】:2020-05-06 23:40:54 【问题描述】:我有以下架构:
const AuthorSchema = new mongoose.Schema(
fullName: type: String, required: [true, "Authors must have a full name"], minlength: [6, "Author's full name must have at least 6 characters"] ,
quotes: [content: type: String, minlength: [6, "Quotes should be six characters"], vote: type: Number, default: 0],
, timestamps: true );
const Author = mongoose.model('Author', AuthorSchema);
module.exports = Author
我正在尝试在我的控制器中使用它来更新特定“报价”中的“投票”:
upvote: function(req, res)
console.log("UPVOTE_CONTROLLER", req.body);
var author = Author.findOne(_id: req.body.authid)
.then(author => (console.log(author))
let quotes = author.quotes;
for (var key in quotes)
if (key._id == req.body.quoteid)
key.vote = key.vote + 1;
console.log("**UPDATED_QUOTE_BEFORE_SAVE", key)
return key.save();
)
.then(saveresult => res.json(saveresult))
.catch(err =>
console.log("****ERRROR HERE****");
console.log(err);
for (var key in err.errors)
req.flash('registration', err.errors[key].message);
res.json(errors: err.errors);
);
,
我一直进入控制器方法,没有抛出任何错误,但 for 循环似乎永远不会运行,
我尝试了许多不同的方式来改变前投票。 key.vote += 1;关键投票+1;等我尝试保存整个作者,而不仅仅是键表示的特定引用。
这个项目的“挑战”是只使用一个模式来做到这一点,所以我不能使用正常的 Quote.findOne(_id: request.body.id) 因为没有 Quote 模式。
我们将不胜感激。
【问题讨论】:
【参考方案1】:我想通了:
在 for 循环中应该是 for ( let key OF quotes) 而不是 IN。
for循环运行后的其他变化:
key.note += 保存;
作者.save();而不是 key.save();
【讨论】:
以上是关于以角度(mongoose/mongodb)更新模型,特别是作为模型属性的对象数组的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose (mongodb) 批量插入、删除、更新和无操作
Mongoose MongoDb 未在 Node Shell 中显示模式或模型
通过在 body、mongoose/mongodb 中提供文档来更新多个文档