2017-11-30 1 views
0

Ich baue eine Anzeigetafel-Web-App mit eckigen, die die Namen und Werte des Spielers anzeigt. Ich möchte Daten auf Saatgut, bevor die Anwendung ausgeführt wird, aber ich bin nur in der Lage, ihren Namen zu impfen, wenn es wie so als String innerhalb eines Arrays aufgeführt wird:Wie man den Spielernamen einstellt und in die Datenbank einträgt

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

Ich möchte den Namen des Spielers und der Gäste auf Saatgut ein Objekt in einem Array mit etwa so:

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

Unten ist meine Funktion, die den Namen des Spielers und Score von ‚0‘ statt ihrer Punktzahl innerhalb des Objekts oben aufgeführten Veröffentlichung. Ich möchte nur, dass ein neuer Spieler eine Punktzahl von "0" erhält.

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; 

Hier ist mein html für den Spieler:

player.html

Hier
<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> 

ist ein Bild davon, wie mein app sieht zur Zeit:

Current

Hier ist ein Bild davon, wie ich meine app möchte aussehen:

Desired

Jede Hilfe würde sehr geschätzt werden!

+0

können Sie nur 'Player.insertMany (Spieler, Rückruf) '? Denn so setze ich meine Datenbank beim Start der App ein. Ich habe eine externe JSON-Datei, die ich analysiere und lege die Elemente in meine Datenbank ein. –

Antwort

0

Wenn Sie beginnen, sollten Sie die Daten in der Regel vorher in Ihrer Datenbank löschen, damit sich keine Spieler in der Datenbank befinden - das bedeutet, Sie müssen sich keine Gedanken darüber machen, ob sie existieren oder nicht schon als du säst.

Wenn dies der Fall ist, können Sie Ihre seed.js wie so schreiben, einfach jeden Spieler aus Array zu erstellen:

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

Wenn Sie nicht Ihre Einträge jedes Mal, wenn Sie reseed Drop können Sie verwenden Sie den Code, den Sie bereits haben, aber wenn Sie den Player in der Datenbank nicht finden, können Sie erstellen das Spielerobjekt aus dem Array mit:

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! 
     }); 
    } 
    }); 
}); 
Verwandte Themen