2016-03-29 9 views
1

Mein Haupt server.js Code, wo ich meine Server starten und eine Verbindung zu MongoDB ServerBulk-Update - BulkWriteResult.nMatched und BulkWriteResult.nModified Rückkehr 0

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'); 
}); 

Jetzt in meiner Controller/Kunden/router.js Controllerdatei ,

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 ???????? 
    } 
}); 

Aber innerhalb der gleichen Klasse kann ich einfach abrufen und Daten zu Db mit Mongoose Model hinzufügen.

+0

wie übergeben Sie 'mongoose' Instanz in router.js? –

+0

darüber, ich benötige eine neue Instanz. var mongoose = verlangen ('mongoose'); Dies ist, was ich getan habe, um ein neues Schema für alle meine Modelle – Bikash

+0

zu generieren, sollten Sie eine globale Verbindung zu mongodb in der Startup-Datei haben und dann an die erforderlichen Routen übergeben. –

Antwort

1

Sie müssen die ID im Objekt konvertieren. Es wie eine Schnur zu benutzen wird nicht funktionieren. Tun Sie das so:

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'}); 
Verwandte Themen