批量更新 – BulkWriteResult.nMatched和BulkWriteResult.nModified返回0

我的主server.js代码,我开始我的服务器,并连接到mongoDb服务器

if(process.env.MONGOLAB_URI) { mongoose.connect(process.env.MONGOLAB_URI); } else { mongoose.connect("mongodb://localhost/itrack"); } global.db = mongoose; mongoose.connection.on('open', function() { // This line is getting printed here console.log('Mongoose opened.'); }); // When successfully connected mongoose.connection.on('connected', function () { console.log('Worker ' + process.pid + ' is alive!'); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port:', app.get('port')); }); }); // If the connection throws an error mongoose.connection.on('error',function (err) { console.log('Mongoose default connection error: ' + err); process.exit(0); }); // When the connection is disconnected mongoose.connection.on('disconnected', function () { console.log('Mongoose default connection disconnected'); }); 

现在我的控制器/客户/ router.js控制器文件,

 router.put("/addstud/:route", function(req,res,next) { var custId = req.user.id; var studList = req.body; var route = req.params.route; db.connection.on('open', function() { // Never goes inside this As i have to bulk Update Operation console.log('Mongoose opened.'); }); db.connection.once('open',function(err,conn) { // Nor this } }); var bulk = Student.collection.initializeUnorderedBulkOp(); // this simple code is not working bulk.find({_id:'56f940172681fda5c6536a4d'}) .updateOne( {name:'test'}); bulk.execute(function(err, result) { if(err) { console.log("ERROR WHILE INSERTING "+err); } else { // This line is getting printed means no error but nothing changed in DB console.log("RESULT "+result.mMatched); // 0 ! HOW ???????? } }); 

但是在同一个class级里,我可以很容易地使用Mongoose Model检索和添加数据给Db。

你必须在对象中转换ID。 使用它像一个string将无法正常工作。 这样做:

 const restful = require('node-restful'); const mongoose = restful.mongoose; let id = new mongoose.Types.ObjectId('56f940172681fda5c6536a4d'); let obj = {"_id": id}; // And then bulk.find({_id:'56f940172681fda5c6536a4d'}).updateOne( {name:'test'});