将JSON数组添加到Mongoose模式(JavaScript)

时间:2015-12-11 19:03:39

标签: javascript arrays json mongodb mongoose

我正在创建一个Android应用程序(一个棒球应用程序),我使用MongoDB来存储我的数据。我希望将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. 并且如果可能的话(如果没有人可以试试这个部分)如果一次添加多个玩家,如果阵列中已有玩家,我该如何存储它们?

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

1 个答案:

答案 0 :(得分:2)

  1. 您不希望将动态变量用作字段名称。我正在谈论你的电子邮件" email@domain.com"。这不会很好,因为你将如何找到对象。通过字段搜索对象并不常见,您可以使用字段名称来描述您要查找的内容。您将需要2个型号。一个用于球员,一个用于教练。 Coach在其Players阵列字段中引用Player。
  2. 如果正确格式化JSON,则无需进行任何解析,只需确保正在发送的JSON格式正确。
  3. 查看addPlayer函数。

  4. 控制器文件(问题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);
    

    教练架构

    '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);