2012-05-09 59 views
0

我试图将一个对象保存到我的数据库;我知道数据库是活动的,因为我已经通过用于更新它的相同连接读取对象。调用Mongoose document.save()似乎不能保存?

saveAndReturnQuiz = (res, quiz) -> 
    quiz.save (err) -> 
    # At some point, started seeing empty object for err, rather than null 
    if not _.isEmpty err 
     switch err?.code 
     when 11000 
      sendError res, "Quiz title must be unique" 
     else 
      console.error "Unexpected error on save(): %j", err 
      sendError res, extractError err 

     return 

    console.log "Sending Quiz response: %j", quiz 

    res.send quiz 

我看到的是对save()的调用失败,但是传递了一个空的err对象。

这里是我的架构:

# Defines the schema of data 
# Exports three Mongoose Model objects: Question, Round, and Quiz 

mongoose = require "mongoose" 

Schema = mongoose.Schema 

Question = new Schema 
    kind: 
    type: String 
    enum: [ "text" ] 
    text: 
    type: String 
    required: true 
    answer: 
    type: String 
    required: true 
    value: Number 
    { strict: true } 

Round = new Schema 
    kind: 
    type: String 
    required: true 
    enum: ["normal", "challenge", "wager"] 
    title: 
    type: String 
    required: true 
    questions: [Question] 
    { strict: true } 

Quiz = new Schema 
    title: 
    type: String 
    required: true 
    unique: true 
    created: 
    type: Date 
    default: -> new Date() 
    location: String 
    rounds: [Round] 
    { strict: true } 

module.exports = 
    Question: mongoose.model('Question', Question) 
    Round: mongoose.model('Round', Round) 
    Quiz: mongoose.model('Quiz', Quiz) 

因此,也许我只是处理错误,这些嵌入元素?

有趣的是,我可以添加新的测验对象数据库,只是没有更新现有的:

app.post "/api/quiz", 
    (req, res) -> 
     quiz = new Quiz req.body 
     saveAndReturnQuiz res, quiz 

    # Update an existing Quiz 
    app.put "/api/quiz/:id", 
    (req, res) -> 
     Quiz.findById req.params.id, 
     handleError res, (quiz) -> 
      _.extend quiz, req.body 
      console.log "Ready to save: %j", quiz 
      saveAndReturnQuiz res, quiz 

进一步更新:当该模型没有嵌套元素,更新似乎正常工作。正是在嵌套元素(Rounds,以及Rounds,Questions)中,事情失败了。

我怀疑在设置我的模式时缺少某些东西,但我不确定接下来要检查什么。

在此先感谢您的帮助!

回答

0

我相信我已经解决了这个问题;我节省了特定测验的实体是一个我直接从蒙戈外壳修改:

> db.quizzes.find({title: "NFJS" }).pretty() 
{ 
    "_id" : ObjectId("4f835669c34c2a9c6f000003"), 
    "created" : ISODate("2012-04-09T21:36:41.726Z"), 
    "location" : "San Antonio", 
    "rounds" : [ 
    { 
     "_id" : ObjectId("4f835669c34c2a9c6f000004"), 
     "kind" : "normal", 
     "questions" : [ 
     { 
      "kind" : "text", 
      "answer" : "My Answer", 
      "value" : 10, 
      "text" : "My Question" 
     } 
     ], 
     "title" : "Server-Side Java and JavaScript" 
    }, 
    { 
     "kind" : "normal", 
     "title" : "Underscore/Bootstrap Trivia", 
     "_id" : ObjectId("4fa317319b19aca4c900004c"), 
     "questions" : [ ] 
    } 
    ], 
    "title" : "NFJS" 
} 

我相信嵌入式实体问题没有_id proprty是问题。通过我的用户界面创建一个新的测验,通过回合和问题,以便每个实体都有它的_id,似乎工作正常!