2017-05-05 68 views
0

我想要按照以下方式存儲數據的方式來構建mongodb。如何以Mongodb的形式保存數據使用貓鼬的嵌套模式

{ 
 
\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 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);

現在,如果我使用下面的代碼保存硬編碼的數據,那麼它是迄今所做的結構工作正常

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

你可以根本讓民調=新的要求( 「yourSchema,JS」);然後poll.save(callback); – FluffyNights

+0

其實我能夠弄清楚如何。我的代碼工作正常,硬編碼數據 –

+0

好吧,你的問題是什麼? – FluffyNights

回答

0

GOT溶液:

首先把下面的代碼在控制器文件

\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處理。我只是爲了簡單起見而在此列出。

現在我用ajax從前端的數據發送到節點

$("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 });