【发布时间】:2016-11-16 23:18:46
【问题描述】:
我正在使用 mongodb、nodejs 等为我的移动应用程序创建一个管理页面。我正在尝试将现有的 json 文件插入到 mongodb 集合中。我尝试了 mongoimport,但它不起作用(我通读并尝试了几个关于它的 stackoverflow 讨论)。所以我想我可以通过 http POST 发送它并使用 insert()。
我运行了三个本地主机服务器: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));
服务器 POST
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()。我直接将 json 加载到集合中,而不是 http.post;
服务器
import mydata from './initialData.json';
...
collection.insert(mydata, function (err, doc) { ... });
我仍然对请求正文做错了什么感到困惑。因为现在如果我做 collection.update();从客户端来看,更新后的元素显然被括号符号弄乱了。
【问题讨论】:
-
您是否在 mongodb 中看到带有方括号的关键属性,即您问题中的最后一个 json?
-
你是否在 express 中使用了一些中间件,比如 bodyParser?
-
是的,app.use(bodyParser.json({limit: '1000kb', parameterLimit: 5000}));
-
好的,这是body-parser,同样的问题:stackoverflow.com/questions/26711666/…
标签: json mongodb body-parser