[英]How to update document in Mongodb collection with a field value from another collection
[英]Increment field of another collection in mongodb
我創建了兩個集合,一個集合用於企業,另一個集合用於員工,其架構如下:
var mongoose= require('mongoose'); var Enterprise= new mongoose.Schema({ name:{type:String}, email:{type:String}, sector:{type:String}, employees: {type:Number,default:0} }); module.exports={ Enterprise:Enterprise };
var mongoose = require('mongoose'); var employee = new mongoose.Schema({ enterprise:{type: String}, name:{type:String}, email:{type:String}, password:{type:String}, gender:{type:String}, }); module.exports = { 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 };
問題是當我添加員工時,企業集合中的employee字段不會增加
我認為您的查詢無法正常工作,因為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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.