我对node.js和mongodb都非常新鲜,但到目前为止我确实非常喜欢它。我正在尝试进行api调用并将收到的数据插入到mongodb中。使用cloud9 IDE btw。
现在,我只发现了有关导入json文件的帖子,例如Insert json file into mongodb
var url = "API CALL HERE"
request(url, function(error, response, body){
if(!error && response.statusCode == 200){
var data = JSON.parse(body);
res.send(data);
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var myobj = data;
db.collection("dabas").insertMany(myobj, function(err, res) {
if (err) throw err;
console.log("Number of documents inserted: " + res.insertedCount);
db.close();
});
});
}
});
json文件中的示例如下所示:
// 20171013085454
// http://api.dabas.com/DABASService/V2/article/GTIN/07310100774460/json?apikey=2d2fbadc-dbe1-420f-a777-65912d65e388
{
"Artikelbeskrivning": null,
"Artikelegenskap": null,
"Produktkod": "103511784459 / Kolonial/Speceri -- Kakao/Chokladdryck -- Kakaopulver -- Kakaopulver",
"OvrigObligatoriskMarkning": null,
"MaximalaAntaletMinstaEnheterIforpackningen": 0,
"Hyllkantstext": "Kakaopulver 20-22",
"Storlek": "1kg",
"TullstatistisktNummer": null,
"Varningsetiketter": [
],
"Sasongskoder": [
],
"Produktklasser": [
],
"MaskinellMarkningar": [
{
"MaskinellMarkning": null,
"TypAvMarkning": null,
"Databarartyp": "EAN UPC"
}
]}
运行时收到此错误消息:
/home/ubuntu/workspace/Projects/Mathubben/node_modules/mongodb/lib/mongo_client.js:433
throw err
^
MongoError: docs parameter must be an array of documents
at Function.MongoError.create (/home/ubuntu/workspace/Projects/Mathubben/node_modules/mongodb-core/lib/error.js:31:11)
at Collection.insertMany (/home/ubuntu/workspace/Projects/Mathubben/node_modules/mongodb/lib/collection.js:501:32)
at /home/ubuntu/workspace/Projects/Mathubben/app.js:26:38
at connectCallback (/home/ubuntu/workspace/Projects/Mathubben/node_modules/mongodb/lib/mongo_client.js:515:5)
at /home/ubuntu/workspace/Projects/Mathubben/node_modules/mongodb/lib/mongo_client.js:430:11
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9)
答案 0 :(得分:1)
这是insertMany的问题
db.collection("dabas").insertMany(myobj, function(err, res) {
使用时
db.collection("dabas").insert(myobj, function(err, res) {
它运作正常
答案 1 :(得分:0)
//像这样修改你的代码
var url =" API在这里打电话"
请求(url,函数(错误,响应,正文){
if(!error && response.statusCode == 200){
var data = JSON.parse(body);
res.send(data);
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var myobj = [];
myobj.push(data);
db.collection("dabas").insertMany(myobj, function(err, res) {
if (err) throw err;
console.log("Number of documents inserted: " + res.insertedCount);
db.close();
});
});
}
});
//你的问题是你传递的是obj而不是数组
//请参阅以下链接以供参考
https://docs.mongodb.com/manual/reference/method/db.collection.insertMany/
答案 2 :(得分:0)
insertMany方法接受文档数组
insertMany([ <doc 1> , <doc 2>, ... ],{
writeConcern: <document>,
ordered: <boolean>
}
)
您正在传递一个物体。
解决方案1:假设您将收到body参数的单个对象,您可以按如下方式修改代码:
request(url, function(error, response, body){
if(!error && response.statusCode == 200){
var data = []
var data.push(JSON.parse(body));
res.send(data);
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var myobj = data;
db.collection("dabas").insertMany(myobj, function(err, res) {
if (err) throw err;
console.log("Number of documents inserted: " + res.insertedCount);
db.close();
});
});
}
});
解决方案2: 您需要修改代码以接收数组中的Json数据。