将API调用中的json插入mongodb
我对node.js和mongodb都很熟悉,但到目前为止我确实很喜欢它。我正在尝试进行api调用,并将接收到的数据插入mongodb。顺便说一句,使用Cloud9IDE 现在我只找到了关于导入json文件的帖子,比如这篇 json文件中的示例如下所示:将API调用中的json插入mongodb,json,mongodb,api,Json,Mongodb,Api,我对node.js和mongodb都很熟悉,但到目前为止我确实很喜欢它。我正在尝试进行api调用,并将接收到的数据插入mongodb。顺便说一句,使用Cloud9IDE 现在我只找到了关于导入json文件的帖子,比如这篇 json文件中的示例如下所示: // 20171013085454 // http://api.dabas.com/DABASService/V2/article/GTIN/07310100774460/json?apikey=2d2fbadc-dbe1-420f-a777-6
// 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)
//像这样修改代码 var url=“此处调用API” 请求(url、函数(错误、响应、正文){ })) //您的问题是您传递的是obj而不是数组 //请参阅下面的链接以供参考
问题出在insertMany上
db.collection("dabas").insertMany(myobj, function(err, res) {
使用时
db.collection("dabas").insert(myobj, function(err, res) {
它工作正常insertMany方法接受一个文档数组
insertMany([ <doc 1> , <doc 2>, ... ],{
writeConcern: <document>,
ordered: <boolean>
}
)
解决方案2:
您需要修改代码以接收数组中的Json数据。“docs参数必须是一个文档数组”似乎非常具有描述性。JSON.parse的结果不是数组。将它包装在一个数组中,或者检查它,如果您希望它是一个数组,那么就找出为什么它不是一个数组。根据您在问题中的回答,您应该执行以下操作:
db.collection(“dabas”).insertMany([myobj],function(err,res){
以包装在一个数组中,或者只需使用.insert()
,它需要一个“单个”文档:db.collection(“dabas”).insert(myobj,function(err,res){
insertMany接受文档数组中的数据,因此您会收到此错误
db.collection("dabas").insert(myobj, function(err, res) {
insertMany([ <doc 1> , <doc 2>, ... ],{
writeConcern: <document>,
ordered: <boolean>
}
)
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();
});
});
}
});