【问题标题】:Adding JSON array to a Mongoose schema (JavaScript)将 JSON 数组添加到 Mongoose 模式 (JavaScript)
【发布时间】:2016-03-17 18:59:47
【问题描述】:

我正在创建一个使用 MongoDB 存储数据的 Android 应用程序(棒球应用程序)。我希望我的 JSON 数据存储到数据库中的方式是这样的。

{"email@domain.com":{
      "coachName": "Smith"
       players:[
            player1:{
                "throws_":"n\/a",
                "position":"position not set",
                "number":"1",
                "playerNum":"H8E83NxRo6",
                "bats":"n\/a",
                "team_name":"Team",
                "name":"Name"}
             player2:{
                "throws_":"n\/a",
                "position":"position not set",
                "number":"1",
                "playerNum":"H8E83NxRo6",
                "bats":"n\/a",
                "team_name":"Team",
                "name":"Name"}
      ]  
}

抱歉,如果有任何语法错误,但本质上这是我想要的 JSON 布局。 mongo 页面“id”是人员电子邮件。其中“球员”是教练拥有的球员名单的数组。 我的问题是,我该怎么做

  1. 正确设置 Mongoose 架构,使其看起来像这样?

  2. 应用发送JSON数据时,如何解析存储数据?

  3. 如果可能(如果没有人可以尝试自己计算这部分),如果同时添加多个玩家,如果阵列中已经有玩家,我该如何存储它们?

所有这些都是后端/服务器端,我的 android 工作正常,我只需要帮助将它存储在 JavaScript 中看起来像这样。

【问题讨论】:

    标签: javascript arrays json mongodb mongoose


    【解决方案1】:
    1. 您不想使用动态变量作为字段名称。我说的是您拥有的电子邮件“email@domain.com”。这不好,因为您将如何找到对象。通过那里的字段搜索对象并不常见,您使用字段名称来描述您要查找的内容。您将需要 2 个模型。一份给球员,一份给教练。 Coach 在其 Players 数组字段中引用 Player。
    2. 如果您的 JSON 格式正确,则无需进行任何解析,只需确保您发送的 JSON 格式正确。
    3. 查看 addPlayer 函数。

    控制器文件(回答问题 2 和 3)

    create = function(req, res) {
        var coach = new Coach(req.body);
        coach.user = req.user;
    
        coach.save(function(err) {
            if (err) {
                return res.status(400).send({
                    // Put your error message here
                });
            } else {
                res.json(coach);
            }
        });
    };
    
    read = function(req, res) {
        res.json(req.coach);
    
    
    };
    
    addPlayer = function(req, res) {
        var coach = req.coach;
        console.log('updating coach', req.coach);
        var player = new Player(req.newPlayer);
        coach.players.push(newPlayer);
    
        coach.save(function(err) {
            if (err) {
                return res.status(400).send({
                    // Put your error message here
                });
            } else {
                res.json(coach);
            }
        });
    };
    



    播放器

    'use strict';
    
    /**
     * Module dependencies.
     */
    var mongoose = require('mongoose'),
        Schema = mongoose.Schema;
    
    /**
     * Player Schema
     */
    var PlayerSchema = new Schema({
        created: {
            type: Date,
            default: Date.now
        },
        throws: {
            type: Number,
        },
        name: {
            type: String,
            default: '',
            trim: true
        },
        position: {
            type: String,
            default: '',
            trim: true
        },
        playerNum: {
            type: String,
            default: '',
            trim: true
        },
        position: {
            type: Number,
            default: 0,
            trim: true
        },
        teamName: {
            type: String,
            default: '',
            trim: true
        }
    });
    
    mongoose.model('Player', PlayerSchema);
    

    Coach 架构

    'use strict';
    
    /**
     * Module dependencies.
     */
    var mongoose = require('mongoose'),
      Schema = mongoose.Schema;
    
    /**
     * Coach Schema
     */
    var CoachSchema = new Schema({
      created: {
        type: Date,
        default: Date.now
      },
      email: {
        type: String,
        unique: true,
        lowercase: true,
        trim: true,
        default: ''
      },
      name: {
        type: String,
        default: '',
        trim: true
      },
      players: [{
        type: Schema.ObjectId,
        ref: 'Player'
      }
    });
    
    mongoose.model('Coach', CoachSchema);
    

    【讨论】:

    • 感谢您这么长的回答,但是导出初始化为什么?
    • 你不必有出口。在 RequireJS 中使用导出来导出函数,以便在导入文件时使用。所以基本上如果你通过执行 var controller = require("controller_file.js") 来导入文件。您可以通过调用 controller.func_name(); 来调用 controller_file.js 中导出的任何函数;
    • 啊,我真傻。这就是我的想法,但认为你正在使用其他东西。但是您的回答在我的脑海中引发了一个关于“正确格式化 json”的想法,所以现在我不需要解析任何内容。只是发送数据。谢谢!
    • 好吧,记住我所说的关于动态字段名的内容。把它想象成一个表格,字段名就像你的列标题。
    • 是的,我确实记得这一点,因此我更改了架构以遵循这一点。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多