Я не вижу изменений, отправленных на веб-сервер, почему?Node.js + MongoDB не делает upsert, почему?
- сервер работает
- я могу видеть в консоли, перед
save
правильный JSON:{ "_id" : "abcd", "key1" : "value1" }
Это тело мое сообщение POST:
["Memorise", [["Diagram", {"_id" : "ab3sdscd", "key2" : "value1"}]]]
var http = require('http');
var MongoClient = require('mongodb').MongoClient;
var myServer = http.createServer(function(request, response)
{
if (request.method == 'POST') {
var data = '';
request.on('data', function (chunk){
data += chunk;
});
request.on('end',function(){
var obj = JSON.parse(data);
var databaseName = obj['db']
MongoClient.connect("mongodb://localhost:27017/" + databaseName, function(err, db) {
if(!err) {
if (obj.length == 2) {
var recordsToUpsert = obj[1]
for (var i = 0; i < recordsToUpsert.length; i++) {
var recordToUpsertAndCollection = recordsToUpsert[i]
var collectionName = recordToUpsertAndCollection[0];
var recordToUpsert = recordToUpsertAndCollection[1];
var collection = db.collection(collectionName);
//console.log(collection)
console.log(recordToUpsert)
collection.save(recordToUpsert, {w:1}, {
//console.log("record upserted");
});
};
response.writeHead(200)
response.end()
}
}
});
});
}
});
myServer.listen(3000)
вы говорите, что тело запроса, что в настоящее время разбирается в 'obj'? Где ключ «db»? Я просто вижу массив с двумя элементами. Также вы не должны подключаться к MongoDB или к любой базе данных «по запросу». Во всяком случае, объедините соединение и просто выберите «пространство имен базы данных» для запроса, что довольно легко сделать. –
Правильный, первый элемент - это имя базы данных '' Memorise', 'collectionName' под названием' Diagram' –
Но вы запрашиваете 'obj ['db']', и этого не существует 'obj [0]' будет первый элемент массива. JavaScript «строит» практически везде. Таким образом, похоже, что вы подключаетесь к базе данных «undefined». У вас есть upserts. –