Node.js 无法更新mongoose中嵌入数组中的属性

Node.js 无法更新mongoose中嵌入数组中的属性,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在与mongoose/n合作开发一个评论系统, 用户可以发表评论,就像reddit一样,用户应该对每条评论投赞成票或反对票。 我有以下评论方案: var commentSchema = new Schema({ text: String, level: { type: Number, min: 0, max: 30, default: 0}, slug: String, full_slug: String, discussion_id: { type: Schema.

我正在与mongoose/n合作开发一个评论系统, 用户可以发表评论,就像reddit一样,用户应该对每条评论投赞成票或反对票。 我有以下评论方案:

var commentSchema = new Schema({
  text: String,

  level: { type: Number, min: 0, max: 30, default: 0},
  slug: String,
  full_slug: String,

  discussion_id: { type: Schema.ObjectId, ref: 'Uranus' },
  parent_id: {type: Schema.ObjectId,ref: 'Comment'},

  score: [{
        upvote: {type: Number,min: 0,max: 9000},
        downvote: {type: Number,min: 0,max: 9000},
        voter: {type: Schema.ObjectId,ref: 'Account'}
    }],

  updated: { type: Date, default: Date.now },
  created: { type: Date, default: Date.now },
  author: { type: Schema.ObjectId, ref: 'Account' },
});
它工作得很好,但我不知道如何更新分数数组。它就是不起作用。 以下是我获得的json数据示例:

{
"__v" : 0,
"_id" : ObjectId("52a0d4ff779edff16d000006"),
"author" : ObjectId("529dfdda6b2d7a450c000009"),
"created" : ISODate("2013-12-05T19:33:19.229Z"),
"discussion_id" : ObjectId("529f7b04cbab31cc3e000004"),
"full_slug" : "2013.12.05.19.33.19:e1CDx79g8",
"level" : 0,
"score" : [ 
    {
        "upvote" : 1,
        "downvote" : 0,
        "voter" : ObjectId("529dfdda6b2d7a450c000009"),
        "_id" : ObjectId("52a0d4ff779edff16d000007")
    }, 
    {
        "upvote" : 0,
        "downvote" : 1,
        "voter" : ObjectId("52a0d9883027a89d6e000002"),
        "_id" : ObjectId("52a0d9903027a89d6e000004")
    }, 
    {
        "upvote" : 0,
        "downvote" : 1,
        "voter" : ObjectId("52a0d99a3027a89d6e000005"),
        "_id" : ObjectId("52a0d9a63027a89d6e000007")
    }
],
"slug" : "e1CDx79g8",
"text" : "A Comment",
"updated" : ISODate("2013-12-05T19:33:19.229Z")
}
所以,我只是更新了评论

var query = {
  'score.voter': mongoose.Types.ObjectId(String('52a0d9883027a89d6e000002'))
};
Comment.update( query, {$set: {"score.$.upvote": 10}} )
问题是,它只是没有更新

我知道,关于这个问题还有其他一些问题,但所有的解决方案都不适合我。我希望有人能帮助我

更新:

发现问题,似乎必须对更新函数进行回调,如下所示:

Comment.update( query, {$set: {"score.$.upvote": 10}}, { multi: false }, function(err,n){
    console.log("affected rows:", n)
});

仅供参考$set在mongoose中是多余的,请尝试更改为
Comment.update(query,{“score.$.upvote”:10})
对其进行了测试,但仍然没有任何更改。很抱歉,我重新阅读了文档,您使用$positional运算符进行了正确的操作。您是否使用find()测试了查询以确保它与任何内容都匹配?此外,如果您匹配多个文档,如果希望更新所有匹配项,则需要添加{multi:true}选项。您可能需要做的另一件事是使用$inc运算符,而不是设置值。谢谢,$set仅用于测试目的。我已经测试过,我发现了一些东西,它确实找到了。我刚刚发现了用于embding文档的方法:,但我认为,这两种方法都应该有效。但我会以官方的方式进行测试。