【发布时间】:2011-12-21 13:49:07
【问题描述】:
我遇到了嵌入式文档更新问题。
我定义的架构:
var Talk = new Schema({
title: {
type: String,
required: true
},
content: {
type: String,
required: true
},
date: {
type: Date,
required: true
},
comments: {
type: [Comments],
required: false
},
vote: {
type: [VoteOptions],
required: false
},
});
var VoteOptions = new Schema({
option: {
type: String,
required: true
},
count: {
type: Number,
required: false
}
});
现在我想用给定的Talk id 和VoteOption id 更新vote.count++。我有以下功能来完成这项工作:
function makeVote(req, res) {
Talk.findOne(req.params.id, function(err, talk) {
for (var i = 0; i < talk.vote.length; i++) {
if (talk.vote[i]._id == req.body.vote) {
talk.vote[i].count++;
}
}
talk.save(function(err) {
if (err) {
req.flash('error', 'Error: ' + err);
res.send('false');
} else {
res.send('true');
}
});
});
}
一切都执行了,我取回了res.send('true'),但计数的值没有改变。
当我做一些console.log 时,我看到它改变了值,但talk.save 只是没有将它保存在数据库中。
我也很不满意这个循环只是为了找到嵌入式文档的_id。在 mongoose 文档中,我读到了关于 talk.vote.id(my_id) 的信息,但这给了我没有 id 函数的错误。
【问题讨论】:
标签: javascript mongodb node.js mongoose