2017-11-30 14 views
0

私はプレーヤーの名前と得点を投稿するスコアボードWebアプリケーションを構築しています。データベースにプレーヤーの名前とスコアをシードする方法

var players = [ 
    'Bob', 
    'Tom', 
    'Mark' 
]; 

私はプレイヤーの名前とスコアをシードしたい:私はそれはそうのように、配列内の文字列として表示されている場合しかし、私は自分の名前をシードすることができる午前、アプリケーションが実行される前にデータをシードしたいですそのような配列内のオブジェクトを使用すると:

var players = [ 
    {"name": "Mary", "score": 9}, 
    {"name": "Barry", "score": 16}, 
    {"name": "Harry", "score": 12} 
]; 

以下はプレイヤーの名前と「0」の代わりに、上記のオブジェクト内の自分のスコアのスコアを掲示される私の関数です。私は、新しいプレイヤーに「0」のスコアを与えたいだけです。

seed.js

players.forEach(function (player, index) { 
    Player.find({ 'name': player}, 
    function(err, players) { 
    if (!err && !players.length) { 
     Player.create({ score: 0, name: player }); 
    } 
    }); 
}); 

This is the model that I created in MongoDB for the player: 

player.jsここ

'use strict'; 

var mongoose = require('mongoose'); 

var playerSchema = new mongoose.Schema({ 
    name: String, 
    score: Number 
}); 

var model = mongoose.model('Player', playerSchema); 

module.exports = model; 

あるプレーヤーのための私のhtml:

player.html

ここ
<div class="item" ng-repeat="player in players | orderBy: 'player.score' "> 
    <label ng-hide="editing" ng-click="editing=true">{{player.name}}</label> 
    <input ng-show="editing" ng-blur="editing = false" class="editing-label" type="text" ng-model="player.name" ng-change="player.edited = true"/> 
    <div class="actions"> 
    <button ng-model="player.score" min="0" ng-click="player.score = player.score - 1" type="number" >-</button> 
    <label ng-model="player.score" placeholder="0" class="editing-label">{{player.score}}</label> 
    <button ng-model="player.score" min="0" ng-click="player.score = player.score + 1" type="number">+</button> 
    <a href="" ng-click="savePlayers()">Save</a> 
    <a href="" class="delete" ng-click="deletePlayer(player, $index)">Delete</a> 
    </div> 
</div> 

は私のアプリは現在、どのように見えるかの写真です:ここで

Current

は、私は私のアプリを見たいかの写真です:

Desired

すべてのヘルプ大変感謝しています!

+0

あなただけの 'Player.insertMany(選手を行うことができますが、コールバック) '?これは、私がデータベースをアプリの起動時にシードするためです。私は解析し、私のデータベースに要素を挿入する外部JSONファイルがあります。 –

答えて

0

シードを渡すときは、通常、データベースにデータをドロップしておく必要があります。そのため、データベースにはまだプレーヤーが存在しないため、存在するかどうかは心配する必要はありませんすでにあなたが蒔いているように。この場合、あなたは、単にあなたの配列から各プレイヤーを作成、そのようなあなたのseed.jsを書くことができ

Player.remove({}, function(err) { 
    //this will remove all the players from your table 
    if(err) console.error(err); 
    else { 
    players.forEach(function (player) { 
     //player is an object with both the name and score 
     Player.create(player, function(err, createdPlayer) { 
     if(err) console.error(err); 
     else console.log('player was created!', createdPlayer); 
     }); 
    }); 
    } 
}) 

あなたのエントリあなたが再シードするたびに落とさないしたい場合は、することができますあなたが既に持っているコードを使用していますが、データベース内のプレーヤーが見つからない場合、あなたはあなたの配列からプレイヤオブジェクトを使用して作成することができます。

players.forEach(function (player) { 
    Player.find({name: player.name }, 
    function(err, players) { 
    if (!err && !players.length) { 
     Player.create(player, function(err) { 
     if(err) console.error(err); //always handle your errors, just in case! 
     }); 
    } 
    }); 
}); 
関連する問題