使用Node.js将数据数组插入数据库

时间:2016-07-07 11:25:00

标签: javascript arrays json node.js mongodb

作为Web开发的新手,我希望您能指出如何将JSON数据插入mongo数据库,以便用于自动创建图形。

I have a JSON response from this URL converted to a JavaScipt object looking like this:

[ { game:
     { name: 'Counter-Strike: Global Offensive',
       popularity: 244757,
       _id: 32399,
       giantbomb_id: 36113,
       box: [Object],
       logo: [Object],
       _links: {} },
    viewers: 246950,
    channels: 488 },
{ game:
         { name: 'League of Legends',
...

但是我想知道如何在数据库中构建这些数据,以便稍后根据获取的时间和日期对我的数据进行图形化。

我想我想保留一份与人气和日期相关的ID列表。

您是否可以指导我如何阅读JSON数组并使用数据更新Mongo集合,以便它看起来像这样?

{
  _id: "32399",
  name: "Counter-Strike: Global Offensive",
  datapoints: [
                {
                  2016-05-18T16:00:00Z
                  viewers: 246950
                  channels: 488
                 },
                 {
                 2016-04-18T16:00:00Z
                 viewers: 230000
                 channels: 433
                 }
              ]
 }

我猜可以使用forEach迭代每个值。但这是正确的方法吗?以及如何对信息进行排序?迭代地遍历每个实体并查找查看器和通道值并保存到新文档缓存或使用updateOne更新我的数据库?

games.top.forEach(function(value) {
    console.log(value)
});

1 个答案:

答案 0 :(得分:0)

嗯,首先,您需要创建一个新的Schema来确定所需的结构。下面的内容,虽然我建议先检查一下mongoose文档。 http://mongoosejs.com/docs/schematypes.html

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var Game = new Schema({
    name: {
        type: String,
        required: true
    },
    datapoints: [{
        created: {
            type: Date,
            default: Date.now
        },
        viewers: {
            type: Number,
            default: 0
        },
        channels: {
            type: Number,
            default: 0
        }
    }]
});

module.exports = mongoose.model('Game', Game);

然后你只需要为数据中的每一行创建并保存一个新的“游戏”实例。

var Game = require('your game model');

for(var idx = 0; idx < data.length; idx++) {
    var object = data[idx];

    var temp = new Game({
        name: object.name,
        datapoints: {
            created: Date.now(),
            viewers: object.viewers,
            channels: object.channels
        }
    });

    temp.save(function(error) {
        if(error) {
            console.log(error);
        }

        console.log('successfully saved');
    });
}

请注意,我没有测试上面的任何内容,它直接来自内存,所以我非常建议阅读Mongoose文档,也许会按照一些教程来帮助您熟悉语法以及Node和Mongoose的方法工作

我希望这会有所帮助。