Node.js 如何在mongo中附加到对象中的数组

Node.js 如何在mongo中附加到对象中的数组,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,例如,我有以下模式: { title:String, content:String, votes:{ up:[ObjectId], down:[ObjectId] } } 我希望附加up数组。如何在Mongoose中使用$addToSet来附加它 我试过这些: Article.findByIdAndUpdate( req.params.id, {$addToSet:{votes:{up:req.user.id}}

例如,我有以下模式:

{
    title:String,
    content:String,
    votes:{
        up:[ObjectId],
        down:[ObjectId]
    }
}
我希望附加up数组。如何在Mongoose中使用$addToSet来附加它

我试过这些:

Article.findByIdAndUpdate(
    req.params.id, 
    {$addToSet:{votes:{up:req.user.id}}}, 
    null,
    function(asdf){
        console.log(asdf);
});
这是我收到的错误消息:

[MongoError: exception: Cannot apply $addToSet to a non-array field. Field named 'votes' has a non-array type Object in the document _id: ObjectId('55e975801026f4e02a17e77b')]

对于这个:

Article.findByIdAndUpdate(req.params.id, {$addToSet:{votes.up:ObjectID(req.u
                                                            ^
SyntaxError: Unexpected token .

您只能从第一条语句中得到“tharterror”。第二种方法可以工作,除非基础数据与模式不匹配。好吧,如果你在
“vots.up”
中引用了“quote”,那么它就起作用了。阅读。@BlakesSeven我已经为收到的错误消息更新了问题。但是您是否阅读了关于“引用”的部分并应用了它?我想你没有那样做。此外,没有必要对猫鼬“施放”。如果架构中的字段类型是
ObjectId
,那么mongoose将为您执行“强制转换”。@BlakesSeven,当我使用
“vots.up”
时,我得到的引号是:
[MongoError:exception:'$addToSet'为空。您必须指定这样的字段:{$addToSet:{:…}]
。我漏掉了一个打字错误。再次抱歉@BlakesSeven
Article.findByIdAndUpdate(req.params.id, {$addToSet:{votes.up:ObjectID(req.u
                                                            ^
SyntaxError: Unexpected token .