2017-05-05 6 views
0

mongodbを次のようにデータを格納するように構造化します。私は少しはmongooseを使用してMongodbネストされたスキーマの形式でデータを保存する方法

var mongoose = require('mongoose'); 
 
var Schema = mongoose.Schema; 
 

 
var voteSchema = new Schema({ 
 
\t ip: String 
 
}); 
 

 
var choiceSchema = new Schema({ 
 
\t text: String, 
 
    votes: [voteSchema] 
 
}); 
 

 
var PollSchema = new Schema({ 
 
\t question: { type: String, required: true }, 
 
\t choices: [choiceSchema] 
 
}); 
 

 
module.exports = mongoose.model('Polls', PollSchema);

を検索した後の構造のために、これまで行ってきた何

{ 
 
\t "question" : "Was today's decision right?", 
 
\t "choices" : [ 
 
\t \t { 
 
\t \t \t "text" : "yes", 
 
\t \t \t "votes" : [ 
 
\t \t \t \t { 
 
\t \t \t \t \t "ip" : "123.123.123.123", 
 
\t \t \t \t \t "time" : "123444" 
 
\t \t \t \t } 
 
\t \t \t ] 
 
\t \t }, 
 
\t \t { 
 
\t \t \t "text" : "no", 
 
\t \t \t "votes" : [ 
 
\t \t \t \t { 
 
\t \t \t \t \t "ip" : "123.123.123.123", 
 
\t \t \t \t \t "time" : "123444" 
 
\t \t \t \t }, 
 
\t \t \t \t { 
 
\t \t \t \t \t "ip" : "123.123.123.123", 
 
\t \t \t \t \t "time" : "123444" 
 
\t \t \t \t }, 
 
\t \t \t \t { 
 
\t \t \t \t \t "ip" : "123.123.123.123", 
 
\t \t \t \t \t "time" : "123444" 
 
\t \t \t \t } 
 
\t \t \t ] 
 
\t \t } 
 
\t ] 
 
}, 
 
{ 
 
\t "question" : "Was yesterday's decision right?", 
 
\t "choices" : [ 
 
\t \t { 
 
\t \t \t "text" : "yes", 
 
\t \t \t "votes" : [ 
 
\t \t \t \t { 
 
\t \t \t \t \t "ip" : "123.123.123.123", 
 
\t \t \t \t \t "time" : "123444" 
 
\t \t \t \t } 
 
\t \t \t ] 
 
\t \t }, 
 
\t \t { 
 
\t \t \t "text" : "no", 
 
\t \t \t "votes" : [ 
 
\t \t \t \t { 
 
\t \t \t \t \t "ip" : "123.123.123.123", 
 
\t \t \t \t \t "time" : "123444" 
 
\t \t \t \t }, 
 
\t \t \t \t { 
 
\t \t \t \t \t "ip" : "123.123.123.123", 
 
\t \t \t \t \t "time" : "123444" 
 
\t \t \t \t }, 
 
\t \t \t \t { 
 
\t \t \t \t \t "ip" : "123.123.123.123", 
 
\t \t \t \t \t "time" : "123444" 
 
\t \t \t \t } 
 
\t \t \t ] 
 
\t \t } 
 
\t ] 
 
}

私はハードコーディングされたデータを保存するには、次のコードを使用している場合今、それはです正常に動作します

var poll = new Poll({ 
 
     question : reqBody.question, 
 
\t \t choices : [ 
 
\t \t \t { 
 
\t \t \t \t text : "yes", 
 
\t \t \t \t votes : [ 
 
\t \t \t \t \t { 
 
\t \t \t \t \t \t ip : "123.123.123.123" 
 
\t \t \t \t \t } 
 
\t \t \t \t ] 
 
\t \t \t }, 
 
\t \t \t { 
 
\t \t \t \t text : "no", 
 
\t \t \t \t votes : [ 
 
\t \t \t \t \t { 
 
\t \t \t \t \t \t ip : "123.123.123.123", 
 
\t \t \t \t \t }, 
 
\t \t \t \t \t { 
 
\t \t \t \t \t \t ip : "123.123.123.123", 
 
\t \t \t \t \t }, 
 
\t \t \t \t \t { 
 
\t \t \t \t \t \t ip : "123.123.123.123", 
 
\t \t \t \t \t } 
 
\t \t \t \t ] 
 
\t \t \t } 
 
\t \t ] 
 
    }); 
 

 
\t poll.save(function(err, data) { 
 
     res.json(data); 
 
    });

しかし、私は(HTML/JS)フロントエンドからのデータを送信する方法を理解することはできませんよ?

+0

ノードには、フロントエンドからのデータを送信するために、AJAXを使用しています。 poll.save(コールバック)。 – FluffyNights

+0

実際に私はどのように把握することができます。私のコードはハードコーディングされたデータでうまく動作しています –

+0

よく、あなたの質問は何ですか? – FluffyNights

答えて

0

ガット・ソリューション:

まず、コントローラファイルに次のコードを入れて

\t var reqBody = req.body; 
 
\t var choices = reqBody.choices; 
 
\t var choicesnew = []; 
 
\t for (var i = choices.length - 1; i >= 0; i--) { 
 
\t \t var votes = []; 
 
\t \t var choice = {text:choices[i],votes: votes}; 
 
\t \t choicesnew.push(choice); 
 
\t } 
 
\t var newPoll = { 
 
\t \t question: reqBody.question, 
 
\t \t choices: choicesnew 
 
\t } 
 
\t var poll = new Poll(newPoll); 
 
\t poll.save(function(err, data){ 
 
\t \t res.json(reqBody); 
 
\t });

そして今、フロントエンド

<form action="#"> 
 
\t \t <input type="text" name="question" placeholder="question"> 
 
\t \t <input type="text" name="choices" placeholder="choices"> 
 
\t \t <input type="text" name="choices" placeholder="choices"> 
 
\t \t <input type="text" name="choices" placeholder="choices"> 
 
\t \t <input type="text" name="ip" placeholder="ip"> 
 
\t \t <input type="submit"> 
 
\t </form>
を使用してデータを渡します

一部のデータはnodejsで処理する必要がありますが、私はここで簡単にするためにリストしています。

今、私はあなたが単に新しい投票=は( "yourSchema、JS")を必要とせんことができ

$("form").on('submit', function(event) { 
 
\t \t \t event.preventDefault(); 
 
\t \t \t $.ajax({ 
 
\t \t \t \t url: '/new', 
 
\t \t \t \t type: 'POST', 
 
\t \t \t \t data: $(this).serializeArray(), 
 
\t \t \t }) 
 
\t \t \t .done(function(data) { 
 
\t \t \t \t console.log(data); 
 
\t \t \t }) 
 
\t \t \t .fail(function() { 
 
\t \t \t \t console.log("error"); 
 
\t \t \t }) 
 
\t \t \t .always(function() { 
 
\t \t \t \t console.log("complete"); 
 
\t \t \t }); 
 
\t \t \t 
 
\t \t });

関連する問題