将API调用中的json插入mongodb

将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

我对node.js和mongodb都很熟悉,但到目前为止我确实很喜欢它。我正在尝试进行api调用,并将接收到的数据插入mongodb。顺便说一句,使用Cloud9IDE

现在我只找到了关于导入json文件的帖子,比如这篇

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)

//像这样修改代码

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();
      });
    });
 }
});