我正在尝试将对象保存到我的数据库中;我知道数据库是活动的,因为我通过用于更新它的相同连接读取了对象。
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()的调用失败了,但是传递了一个空的错误对象。
这是我的架构:
# 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)
所以也许我只是错误地处理这些嵌入式元素?
有趣的是,我可以将新的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 :(得分:0)
我相信我已经解决了这个问题;我保存的特定测验实体是我直接从mongo shell修改的实体:
> 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是问题。通过我的UI创建一个带有圆形和问题的新测验,以便每个实体都有_id,似乎工作正常!