У меня есть проблемы с сохранением данных в моем mongodb с использованием мангуста. Вот код, который я использую:MongoDB using Mongoose save issues
////////////////////////////////////////
//// Mongoose test
var url = mongoUrl + dbCollectionName;
var mongoose = require('mongoose');
mongoose.connect(url);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
console.log(getTimeStamp() + 'Connected to Mongo with Mongoose');
insertDocuments(db);
});
var ackSchema = new mongoose.Schema({
hostgroup : String,
host : String,
service : String,
timePeriod : String,
startTime : Number,
ackTime : Number,
deltaTime : Number,
caseNumb : String,
state : Number,
author : String,
ackId : Number,
});
// Creation of the model document
var ackModel = mongoose.model(collectionName, ackSchema, collectionName);
//////////////////////////////////////
//// Functions
// MySQL function (query, push to array etc)
var mysqlQuery = function (callback) {
var query = mysqlConnection.query(sqlQuery), sql = [];
var anyRow = 0;
// Log query error
query.on('error', function (err) {
if (err) {
console.error(getTimeStamp() + 'Error in MySQL query: ' + err);
return;
}
});
// On result, push results in sql array
query.on('result', function (row) {
// Non-blocking I/O
mysqlConnection.pause();
mysqlConnection.resume();
sql.push(row);
callback(row);
});
// Information then close connection
query.on('end', function (row) {
// If anRow == 1, close the app.
if (!row) { anyRow = 1; }
if (row) { anyRow = 0; }
if (anyRow == 1) {
console.log(getTimeStamp() + 'Connection to Mongoose closed ');
console.log(getTimeStamp() + 'Connection to MySQL closed ');
process.exit(0);
}
if (anyRow == 0) {
console.log(getTimeStamp() + 'Connection to Mongoose closed ');
console.log(getTimeStamp() + 'Connection to MySQL closed ');
}
});
mysqlConnection.end();
};
// Insert Documents into mongodb using MySQL info and mongoose ackModel.
var insertDocuments = function(db) {
// SQL Query to fetch row
mysqlQuery(function (row) {
//// IF 8/20
if (row.timeperiod == timePeriod820) {
returnValue = timePeriodCalc(row); // Function from timeperiod.js
deltaValue = parseInt(returnValue.slice(6)); // Get our Delta Value
caseValue = returnValue.slice(0,4); // Get the Case Number, verification purpose
//// ELSE 24/7
} else {
deltaValue = (row.ack_time - row.start_time);
caseValue = 'C.0';};
};
var ack = new ackModel({
hostgroup : row.hostgroup,
host : row.hostname,
service : row.servicename,
timePeriod : row.timeperiod,
startTime : row.start_time,
ackTime : row.ack_time,
state : row.state,
deltaTime : deltaValue,
caseNumb : caseValue,
author : row.author,
ackId : row.ack_id});
console.log(ack);
//console.log(getTimeStamp() + 'SAVE Mongoose : ' + ack.author + ' ' + ack.ackId);
ack.save(function (err1, ack) {
if (err1) {
console.log(getTimeStamp() + 'Mongoose .save error : ' + err1);
}
else {
console.log(getTimeStamp() + 'SAVE Mongoose : ' + ack.author + ' ' + ack.ackId);
}
});
});
};
Это то, что возвращение журнала:
[2016-01-12 10:56:04.403] - Connected to Mongo with Mongoose
{ _id: 5694cdb49b274b1100262896,
ackId: 1184,
author: 'victor.b',
caseNumb: 'C.10',
deltaTime: -1200,
state: 2,
ackTime: 1452590840,
startTime: 1452592040,
timePeriod: 'RESSOURCES-GPE-N1-8/20',
service: 'Service-Random-5M',
host: 'CRI_HOST3',
hostgroup: 'CRIDF' }
[2016-01-12 10:56:04.506] - Connection to Mongoose closed
[2016-01-12 10:56:04.507] - Connection to MySQL closed
Так как вы можете видеть все, кажется, хорошо, так как мой извед документ от моего ackModel заполнена полностью с правильная информация. Но сэкономить не получилось. Я тестировал много вещей, прежде чем приходить сюда, но у меня нет идей.
EDIT 1: Благодаря @zangw я уже понял, что моя проблема исходит из этого блока кода:
// On result, push results in sql array
query.on('result', function (row) {
// Non-blocking I/O
mysqlConnection.pause();
mysqlConnection.resume();
sql.push(row);
callback(row);
});
Поскольку я не tottally используется с Node.js обратных вызовов, может быть, я» что-то не так с тем, что там.
Я просто проверяю его на основе ваших кодов и получаю результат 'SAVE Mongoose: victor.b 1184', вот [код] (https://gist.github.com/richzw/827054124f8b6b0282a4), я просто удаляю 'mysqlQuery' и' getTimeStamp() ', потому что я не понимаю их ... – zangw
Вы проверяете, сохранен ли этот' ack' в mongoDB или нет? – zangw
Да, конечно, ack должен быть сохранен в моем col_201601, но коллекция не создана: [Screenshoot] (http://puu.sh/msSFM/4b23d4f495.png) –