使用猫鼬更新子文档
Updating a subdocument with Mongoose
我正在构建一个简单的民意调查应用程序,其中包含角度,快速和猫鼬。
我的数据如下所示:'
var mongoose = require('mongoose');
var responseSchema = new mongoose.Schema({
responseText: String,
votes: {
type: Number,
default: 0
}
})
module.exports = mongoose.model('Responses', responseSchema);
var pollsSchema = new mongoose.Schema({
question: String,
responses: [responseSchema]
})
module.exports = mongoose.model('Polls', pollsSchema);`
因此,我有一个包含子文档响应模型的民意调查模型。
当有人投票时,我想增加响应的投票计数。这是我正在处理的查询,但它不正确。
router.post('/api/polls/:id/vote', function (req, res, next) {
console.log("Poll ID : " + req.params.id);
console.log("Option ID : " + req.body._id);
Polls.findOneAndUpdate({
_id: req.params.id
}, {
$inc: {
'responses.id(req.body.id).votes': 1
}
}, function (err, post) {
if (err) return next(err);
console.log(err);
console.log(post);
console.log(post.responses.id(req.body._id).votes);
});
})
编辑:更新
基本上,我在 req 参数中发送 Poll ID,在响应正文中发送响应 ID。我能够安慰.log投票值,但我不知道如何编写查询。谁能帮忙?
谢谢!
您可以使用
$inc
运算符。请参阅文档。
Polls.findOneAndUpdate({
_id: req.params.id,
responses._id: req.body._id
}, {
{$inc: {'responses.$.votes': 1}}
});
找到了一个解决方案:基本上只需使用 findOne 来缩小 id 的范围,然后在回调中执行查询。看起来有点奇怪,但它有效。如果其他人有更好的方法,我很想听听。谢谢!
router.post('/api/polls/:id/vote', function (req, res, next) {
Polls.findOne({
_id: req.params.id
}, 'responses', function (err, post) {
post.responses.id(req.body._id).votes++;
post.save();
})
})
相关文章:
- 流星收集更新不是在更新文档
- 使用猫鼬更新子文档
- MongoDB findAndModify:>>>查找和更新文档数组中的对象
- Javascript 不会在浏览器中更新文档
- 更新数组中的嵌入文档 - Mongodb + Node Driver
- 如何在猫鼬中更新文档后添加一些操作
- Mongodb 嵌套文档更新
- 检查文档是否已经存在,如果是则更新,否则创建新的Mongoose
- 如何在更新mongo文档时使用变量
- 在更新选择器中使用$in时颠倒多个文档
- 编辑以前保存的文档也会更新数据库中的文档
- 使用mongodb更新多个文档
- Mongoose创建一个文档,如果找不到指定的字段,则更新文档中的数组
- Meteor Update集合-未捕获错误:不允许.不受信任的代码只能通过ID更新文档.[403]
- Mongo-shell游标:更新后的文档再次到达游标
- 在MongoDB中获取“更新前”文档
- 数组中嵌入文档的集合更新属性
- 如何将一些参数从javascript接收响应字符串 asp.net 页面并更新html文档
- 如何从 MongoDB 文档更新与特定值匹配的数组
- 猫鼬嵌入文档更新