如何在mongodb的子文档模式结构中更新数组字段
How to update array field in subdocumented schema structure in mongodb
TaskInfo Schema:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var taskInfo = mongoose.Schema({
isactive:{type:Boolean},
taskobject:{type:String},
taskdetails:{type:String},
iscompleted:{type:Boolean}
});
var TaskInfo = mongoose.model('TaskInfo', taskInfo);
module.exports.TaskInfo = TaskInfo;
module.exports.TaskInfoSchema = taskInfo;
TaskSchema:
var mongoose = require('mongoose');
var TaskInfoSchema = require("./taskinfo.js").TaskInfoSchema
var Schema = mongoose.Schema;
// Task schema
var taskSchema = mongoose.Schema({
tasktype : {type: String},
createdon : {type: Date, default: Date.now},
//createdby : {type: Schema.Types.ObjectId,ref: 'User'},
//visitedby : [{type: Schema.Types.ObjectId,ref: 'User'}],
taskinfo : [TaskInfoSchema]
});
module.exports = mongoose.model('Task', taskSchema);
这是routefile/controller:
var TaskInfo = require('../models/taskinfo.js').TaskInfo;
var Task = require('../models/task.js');
var config = require('../../config');
module.exports = function (app, express) {
var api = express.Router();
//GET method is for fetching all the tasks from the database,
api.get('/taskdb', function (req, res) {
//console.log("____");
Task.find({}, function (err, taskdb) {
if (err) {
res.send(err);
return;
}
res.json(taskdb);
});
});
//POST method is for saving all the tasks to the database,
api.post('/tasks', function (req, res) {
var task = {};
task.tasktype = req.body.tasktype;
task.taskinfo = [];
for (var i = 0; i < req.body.taskInfo.length; i++) {
console.log(i);
var taskInfo = new TaskInfo(req.body.taskInfo[i]);
task.taskinfo.push(taskInfo);
}
var taskObj = new Task(task);
taskObj.save(function (err) {
if (err) {
res.send(err);
return;
}
res.json({
message: 'Task has been created'
})
});
});
return api
}
我正在尝试添加REST api来更新每次面对错误的值,有人请告诉我数组是如何更新的,请建议我一些好的资源,如果你发现它太基本,不应该在这里问。
下面是我的代码更新操作:
api.use('/tasks/:taskId',function(req, res, next){
Task.findById(req.params.taskId, function(err, task){
if(err){
res.send(err);
return;
}
else if(task)
{
req.task = task;
next();
}
else
{
res.status(404).send ('no task found with such details');
}
});
});
api.patch ('/tasks/:taskId',function(req,res){
if(req.body._id)
delete req.body._id;
for(var p in req.body)
{
req.tasktype[p] = req.body[p];
}
for(var p in req.body)
{
req.taskInfo[p] = req.body[p];
}
req.taskobj.save(function(err){
if(err){
res.send(err);
return;
}
res.json({message:'Task edited & updated '})
});
});
您可以使用$set operator
更新文档1)如果要基于子文档id
更新子文档var id = taskInfoId;
here i am going to update field "isactive" of particular taskinfo
Task.update({"taskinfo._id":id},{$set:{"isactive":true}},function(err,success){
if(err){
}else{
}
});
2)如果要根据父文档id更新子文档,则
var taskId = taskId;
Task.update({"_id":taskId},{$set:{"isactive":true}},function(err,success){
if(err){
}else{
}
});
相关文章:
- Javascript循环不会自我更新
- 添加文字和评论功能更新Div
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何通过数组更新角度子范围
- Ajax聊天消息重复而不仅仅是更新
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- $rootScope未使用forEach进行更新
- 基于其他数据结构更新 AngularJS 中的数据结构
- 从knockout.js中的另一个对象更新一个深度结构化的javascript对象
- 如何在不可变JS中存储和更新深度嵌套的结构
- 需要哪种体系结构才能允许多个 Web 应用协同工作,这些应用可以单独更新
- 如何使用ajax更新表单结构
- 如何使用嵌套层次结构更新嵌入文档
- 如何在mongodb的子文档模式结构中更新数组字段
- 优化3D动画的节点层次结构更新
- Javascript中的类、对象和结构之间有什么区别?(2016年更新)
- Node.js-对于频繁更新的内容来说,这是一个好的结构吗
- 不可变的js更新深层结构
- 如何使用这样的脚本或文本编辑器批量更新位于.html文件中的基本一对一密钥结构?