Я создаю страницу администратора для своего мобильного приложения, используя mongodb, nodejs и т. д. Я пытаюсь вставить существующий файл json в коллекцию mongodb. Я попробовал mongoimport, но это просто не сработало (я прочитал и попробовал несколько обсуждений по этому поводу). Итак, я понял, что могу отправить его через http POST и использовать insert().
У меня работают три сервера localhost: mongodb, сервер приложений и страница администрирования веб-сайта.
json-файл выглядит так:
{"data_version":1,"drivers_teams":{"drivers":{"4":{"name":"Hofer","firstname": ... }}}
клиент POST
$.getJSON("initialData.json", function(json) {
$.ajax({
url: 'localhost:3080/client_data',
type: 'POST',
data: json,
success: function(res) {
console.log(res);
}.bind(this),
error: function(xhr, status, err) {
console.error(url, status, err.toString());
}.bind(this)
});
}.bind(this));
сервер ПОСТ
app.use(bodyParser.json({limit: '1000kb', parameterLimit: 5000}));
app.use(bodyParser.urlencoded({limit: '1000kb', parameterLimit: 5000, extended: false}));
app.post('/client_data/', (req, res) => {
const db = req.db;
const collection = db.get('collection');
collection.insert(req.body, function (err, doc) {
if (err) {
res.status(500).send('Invalid request');
return;
}
res.send('ok');
});
});
пока все хорошо, но после того, как мне удастся вставить данные и спросить сервер, что у вас есть? Я получил:
{"_id":"57872f9fe51246dc1b3bbc93","data_version":"1","drivers_teams[drivers][4][name]":"Hofer","drivers_teams[drivers][4][firstname] ... }}}
Я больше не могу использовать эти данные. Итак, вопрос: как я могу вставить вложенный json как есть, когда он поступает из тела http-запроса?
ИЗМЕНИТЬ
Хорошо, разобрался, как сделать AS-IS insert(). Вместо http.post я загружаю json прямо в коллекцию;
сервер
import mydata from './initialData.json';
...
collection.insert(mydata, function (err, doc) { ... });
Все еще смущен, что я делаю неправильно с телом запроса. Потому что теперь, если я сделаю collection.update(); от клиента обновленный элемент явно перепутался с обозначением скобок.