繁体   English   中英

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

[英]Adding JSON array to a Mongoose schema (JavaScript)

我正在创建一个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. 正确设置猫鼬模式看起来像这样吗?

  2. 当应用程序发送JSON数据时,如何解析它以存储数据?

  3. 并且如果可能的话(如果没有人的话,请尝试尝试自己摸索这一部分),如果一次添加多个播放器,如果阵列中已经有播放器,我如何存储它们?

所有这些都是后端/服务器端,我让android正常工作,我只需要帮助将其存储为JavaScript即可。

  1. 您不想使用动态变量作为字段名称。 我说的是您的电子邮件地址为“ email@domain.com”。 那样不好,因为您将如何找到对象。 通过那里的字段搜索对象并不常见,您可以使用字段名称来描述您要查找的内容。 您将需要2个模型。 一个给球员,一个给教练。 教练在其玩家数组字段中对玩家进行了刷新。
  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);

教练模式

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM