2017-09-04 46 views
0

我在我的控制器中有這部分代碼,我想要做的是當我在郵遞員"localhost:3000/project/:id"中做一個"getProject"在同一個屏幕上做一個帖子或把它放在params上,但是當我試圖做put或發佈沒有在我的項目模型保存如何在平均堆棧項目中推送文檔?

我試着用這個代碼,但不這樣做,我想

function createWork(req, res) { 
    var work = new Work(); 
    var project = new Project(); 
    var projectId = req.params.id; 
    var params = req.body; 

    obra.name = params.name; 
    obra.oficialName = params.oficialName; 
    obra.price = params.price; 
    obra.workType= params.workType; 
    obra.ubication = params.ubication; 

    console.log(params); 

    Project.update({"Title":"project"}, { 
     $push: { 
      "work": { 
       "name":'name', 
       "oficialName":'oficialName', 
       "price":'price', 
       "workType":'workType', 
       "ubication":'ubication', 
      } 
     } 
    }, 
    {safe: true, upsert: true}, 
    function(err, updProject){ 
     if (err) { 
      res.status(404).send({message: 'Error'}); 
     } else { 
      res.status(200).send({project: updProject}); 
     } 
    }); 
} 

我有兩個型號,firstone是「項目」

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var Work = require('../models/work'); 

var ProjectsSchema = Schema({ 
    name: String, 
    officialName: String, 
    price: String, 
    startDate: String, 
    endDate: String, 
    contract: String, 
    works: [{ type: Schema.Types.Object, ref: 'Work'}] 
}); 

var Project = mongoose.model('Project', ProjectsSchema); 

和seco第二是「工作」模式:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var WorksSchema = Schema({ 
    name: String, 
    officialName: String, 
    price: String, 
    workType: String, 
    ubication: String 
}); 

module.exports = mongoose.model('Work', WorksSchema); 

,我想要做的是創造項目控制器功能和「工作」的數據推到現有的「項目」

回答

0

我這樣做,我想,有了這個代碼,我的控制器

function createWork(req, res) { 
    Project.findByIdAndUpdate((req.params.id), { 
     $push: { 
      "works": req.body 
     } 
    }, 
    function(err, updProject) { 
     if (err) { 
      res.status(404).send({message: 'Error'}); 
     } else { 
      res.status(200).send({project: updProject}); 
     } 
    }); 

} 

,並以此作爲我的模型

'use strict' 

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var WorkSchema = new mongoose.Schema({ 
    name: String, 
    officialName: String, 
    price: String, 
    workType: String, 
    ubication: String 
},{timestamps:true}); 

var ProjectsSchema = new mongoose.Schema({ 
    name: String, 
    officialName: String, 
    price: String, 
    contract: String, 
    start: String, 
    end: String, 
    works: [WorkSchema] 
},{timestamps:true}); 

module.exports = mongoose.model('Project', ProjectsSchema); 
0

Controller.js

function createWork(req, res) { 

    var newProject = new Project(); 

    var name = req.body.name; 
    var oficialName = req.body.oficialName; 
    var price = req.body.price; 
    var workType= req.body.workType; 
    var ubication = req.body.ubication; 

    var dataToPush = { 
     name : name, 
     officialName : officialName, 
     price : price, 
     workType : workType, 
     ubication : ubication 
    } 

    newProject.update({"Title":"project"}, { 
     $push: { 
      "work": dataToPush 
     } 
    }, 
    {new : truesafe, safe : true, upsert : true}, 
    function(err, updProject){ 
     if (err) { 
      res.status(404).send({message: 'Error'}); 
     } else { 
      res.status(200).send({project: updProject}); 
     } 
    }); 
} 

Model.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var WorkSchema = new mongoose.Schema({ 

    name : String, 
    officialName : String, 
    price : String, 
    workType : String, 
    ubication : String 
},{timestamps:true}) 

var ProjectSchema = new mongoose.Schema({ 
    projectName : String, 
    work : [WorkSchema] 
},{timestamps:true}); 

module.exports = mongoose.model('project', ProjectSchema) 
+0

它給我一個錯誤,說:「callback.apply不是一個函數」,所以,我有另外一個問題,如果是沒有問題的呵呵,我想要做的是,我有兩個模型「項目」和「工作」,所以項目有名稱,官方名稱等和「工作」數組,所以我想推「工作」數據到項目中的工作陣列,謝謝,我會編輯我的帖子嘿嘿 –

+0

這個錯誤可能是因爲{{upsert:true}'發生的,刪除它並執行 – Vicky

+0

它不會推動工作,首先我需要做的是「創建項目」,所以當ia使用所有數據創建項目「名稱,官方名稱,價格, startDate,endDate,合同,工作:[]。「所以之後,我需要創建一個工作,保存到工程數組在項目中,我創建到該項目中的每項工作必須保存到工作數組 –