【问题标题】:Inserting array of data into database using Node.js [duplicate]使用Node.js将数据数组插入数据库[重复]
【发布时间】:2016-07-07 11:24:59
【问题描述】:

作为 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)
});

【问题讨论】:

    标签: javascript arrays json node.js mongodb


    【解决方案1】:

    首先,您需要创建一个新架构来确定所需的结构。类似于以下内容,尽管我建议您事先查看 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工作。

    我希望这会有所帮助。

    【讨论】:

    • 您的代码看起来不错,但您需要自己回答一个问题。您如何确定是否所有游戏都已保存以便为客户端做出响应?
    • @JoseHermosillaRodrigo 抱歉,我不确定你的意思。您是否建议提供有关如何从集合中获取数据并根据特定参数(即 order 或 id)输出的参考?
    • 感谢您的代码就像一个魅力。只需稍微编辑对象。 for(var idx = 0; idx &lt; games.top.length; idx++) { var object = games.top[idx]; var temp = new Game({ name: object.game.name, datapoints: { created: Date.now(), viewers: object.game.viewers, channels: object.game.channels, } });
    • @dwigt 乐于助人!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    相关资源
    最近更新 更多