2016-09-29 3 views
0

Я создал две коллекции, один для предприятия, а другой для сотрудников, их схема следующим образом,Increment поле другой коллекции в MongoDB

var mongoose= require('mongoose'); 
 

 
var Enterprise= new mongoose.Schema({ 
 
\t 
 
\t name:{type:String}, 
 
\t email:{type:String}, 
 
\t sector:{type:String}, 
 
\t employees: {type:Number,default:0} 
 

 
}); 
 

 

 
module.exports={ 
 
\t Enterprise:Enterprise 
 
};

var mongoose = require('mongoose'); 
 

 
var employee = new mongoose.Schema({ 
 
    
 
    enterprise:{type: String}, 
 
\t name:{type:String}, 
 
\t email:{type:String}, 
 
\t password:{type:String}, 
 
\t gender:{type:String}, 
 
}); 
 

 
module.exports = { 
 

 
\t employee:employee 
 
};

мой работник сотрудника,

var mongoose = require('mongoose'); 
 
var q = require('q'); 
 

 
var employee = mongoose.model('employee'); 
 
var enterprise = mongoose.model('enterprise'); 
 

 
var addEmployee = function(req, res) { 
 

 
    newEmployee = new employee(); 
 

 
    newEmployee.enterprise = req.params.enterprise; 
 
    newEmployee.name = req.params.name; 
 
    newEmployee.email = req.params.email; 
 
    newEmployee.gender = req.params.gender; 
 

 
    function detailSave() { 
 

 
     var deferred = q.defer(); 
 

 
     newEmployee.save(function(err, data) { 
 

 
      if (err) { 
 
       res.send(500); 
 
       console.log('couldnt save employee details'); 
 
       deferred.reject({errmessage: 'couldnt save employee details', err: err}); 
 
      } else { 
 

 
       res.send(200); 
 
       deferred.resolve({data: data}); 
 
      } 
 
     }); 
 

 
     return deferred.promise; 
 
    } 
 

 
    function incrementEmployee(doc) { 
 

 
     var deferred = q.defer(); 
 

 
     enterprise.findOneAndUpdate({ 'name': doc.enterprise }, { $inc: { 'employees': 1 } }, 
 

 
      function(err, num) { 
 
       if (err) { 
 
        deferred.reject({errmessage: 'couldnt incrementEmployee', err: err}); 
 
        res.send(500); 
 
        console.log('couldnt incrementEmployee'); 
 
       } else { 
 
        res.send(200); 
 
        deferred.resolve({num:num}); 
 
       } 
 
      }); 
 

 
     return deferred.promise; 
 

 
    } 
 

 
    detailSave() 
 
     .then(incrementEmployee) 
 
     .then(function(success) { 
 
      console.log('success', success); 
 
      res.json(200, success); 
 
     }) 
 
     .fail(function(err) { 
 
      res.json(500, err); 
 
     }) 
 
     .done(); 
 

 
}; 
 
module.exports = { 
 
    addEmployee: addEmployee 
 
};

Проблема заключается в том, когда я добавить сотрудника, поле сотрудников в коллекции предприятия не увеличивает

+0

Вы можете проверить значение 'data' в deferred.resolve ({ данных: данные }) ;? А также проверить 'значения doc' в' incrementEmployee'function – abdulbarik

+0

{данные: {__v: 0, пол: 'мужской', электронная почта: '[email protected]', имя: 'ашок', предприятия: 'skydrive', _id: 57ecbf6bf0de631cf333dab5}} success {num: null} – Idlliofrio

+0

Это ваше значение 'doc' в методе' incrementEmployee'? – abdulbarik

ответ

0

Я думаю, ваш запрос не работает, так как doc.enterprise является null На основе вашего комментария.

попытаться дать ваш query как этот {'name': doc.data.enterprise}

function incrementEmployee(doc) { 

    var deferred = q.defer(); 

    enterprise.findOneAndUpdate({ 
     'name': doc.data.enterprise 
    }, { 
     $inc: { 
     'employees': 1 
     } 
    }, 

    function(err, num) { 
     if (err) { 
     deferred.reject({ 
      errmessage: 'couldnt incrementEmployee', 
      err: err 
     }); 
     res.send(500); 
     console.log('couldnt incrementEmployee'); 
     } else { 
     res.send(200); 
     deferred.resolve({ 
      num: num 
     }); 
     } 
    }); 

    return deferred.promise; 

} 
+0

он не работает, поскольку num содержит детальную коллекцию предприятия вместо employee.i изменил запрос на newEmployee.enterprise, и это сработало, спасибо, что указали его out – Idlliofrio

+0

Отлично, приветствие !!. – abdulbarik

Смежные вопросы