以角度(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 中提供文档来更新多个文档

mongoose/mongodb 不会用 PUT 更新

Nodejs之MEAN栈开发---- 使用MongoDB和Mongoose创建数据模型及API

GraphQL Mutation 使用 Mongoose/MongodB 更新用户关注者 - $set 为空错误