rsk*_*uja 10 javascript mongoose mongodb node.js
我有嵌入式文档更新的问题.
我定义的架构:
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
}
});
Run Code Online (Sandbox Code Playgroud)
现在我想vote.count++用给定的Talkid和VoteOptionid 更新.我有以下功能来完成这项工作:
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');
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
一切都在执行,我回来了res.send('true'),但是计数值并没有改变.
当我做了一些时,console.log我看到它改变了值,但是talk.save只是没有将它保存在db中.
此外,我对于查找_id嵌入式文档的周期非常不满意.在我读过的mongoose文档中,talk.vote.id(my_id)但这给了我一个没有id函数的错误.
pim*_*vdb 19
更新Mixed类型(似乎不是基本类型,因此也包括嵌入文档)时,必须调用.markModified文档.在这种情况下,它将是:
talk.markModified("vote"); // mention that `talk.vote` has been modified
talk.save(function(err) {
// ...
});
Run Code Online (Sandbox Code Playgroud)
希望这有助于未来的人,因为我很快找不到答案.
...... Mongoose失去了自动检测/保存这些变化的能力.要"告诉"Mongoose混合类型的值已更改,请调用
.markModified(path)文档的方法将路径传递给刚刚更改的混合类型.
| 归档时间: |
|
| 查看次数: |
4740 次 |
| 最近记录: |