Ich habe etwa 300.000 Dokumente in einer meiner Sammlungen in Mongodb und das ist alles in AWS sitzen. Wenn ich nach dieser bestimmten Route (ding2) frage, scheint es, als wäre es zu viel für Mongo, damit der mongod-Dienst abstürzt. Ich habe meinem Code ein Limit hinzugefügt, aber es funktioniert immer noch nicht. Im Idealfall würde ich gerne nach bestimmten Keywords suchen können, aber dieser Teil wurde vorerst auskommentiert.Nodejs Code Absturz Mongodb Server
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World!')
});
app.get('/thing2', function(req, res) {
var username = req.query.username
var keyword = req.query.keyword
var MongoClient = require('mongodb').MongoClient,
assert = require('assert');
var url = 'mongodb://localhost:27017/my_db';
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var collection = db.collection('my_collection');
/* collection.find({ $and: [
* {"text" : {$regex : ".*"+keyword+".*"}},
* {"username" : username}
* ] }).limit(5).toArray(function(err, docs) {
*/
collection.find({"user.screen_name" : username}).limit(1).toArray(function(err, docs) {
console.log("\n" + new Date().toLocaleString() + " " + username);
if (!err) {
console.log(docs.length)
} else {
console.log(err)
}
res.send(docs)
});
});
});
app.listen(80, function() {
console.log('Listening on port 80!')
});
Der Fehler, den ich in meiner Konsole sehen ist:
{ [MongoError: connection 0 to localhost:27017 closed]
name: 'MongoError',
message: 'connection 0 to localhost:27017 closed' }
Edit: Mongo log
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten]
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten]
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-04-19T03:59:03.458+0000 I CONTROL [initandlisten]
2017-04-19T03:59:03.471+0000 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongodb/diagnostic.data'
2017-04-19T03:59:03.471+0000 I NETWORK [initandlisten] waiting for connections on port 27017
2017-04-19T03:59:03.471+0000 I NETWORK [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2017-04-19T03:59:04.003+0000 I FTDC [ftdc] Unclean full-time diagnostic data capture shutdown detected, found interim file, some metrics may have been lost. OK
2017-04-19T03:59:23.504+0000 I COMMAND [ftdc] serverStatus was very slow: { after basic: 40, after asserts: 110, after connections: 130, after extra_info: 160, after globalLock: 310, after locks: 540, after network: 630, after opcounters: 760, after opcountersRepl: 870, after storageEngine: 1120, after tcmalloc: 1540, after wiredTiger: 2690, at end: 3370 }
Sie brauchen nicht (sollte nicht), um die ganze Zeit, die Sie eine Anfrage haben, zu verbinden. Sie können sich einmal am Anfang verbinden und diese Verbindung in Ihrer gesamten Anwendung verwenden. –
@ israel.zinc wie würde ich das dann reparieren? – user1883614
Was sagt das Mongo-Log, wenn der Service abstürzt? Sind Sie in einer Nano-Instanz? Mongo ist ziemlich solide normalerweise – Matt