在Mongoose中设置或创建嵌入式文档

时间:2014-05-23 18:16:49

标签: mongodb mongoose database

我有一个如下架构:

/**
 * Answer Schema
 */
var AnswerSchema = new Schema({
  answer: Number,
  owner_id: Schema.Types.ObjectId
});

/**
 * Poll Schema
 */
var PollSchema = new Schema({
  question: { type: String, required: true, trim: true },
  choices: [ { type: String, required: true, trim: true} ],
  answers: [AnswerSchema]
});

如何为给定的poll_id和回答投票的人的owner_id设置答案?

1 个答案:

答案 0 :(得分:0)

术语"设置或创建"有点打开这个。

基本上,您将使用带有.update()的{​​{3}}运算符添加(创建)数组中的新项目,或者在拥有当前文档后使用标准JavaScript数组推送在.find()之后。

但考虑到你可能想要"更新"对于给定所有者的现有答案,那么它可能是两步操作。如果没有,那么你只需要"更新"使用$push

PollSchema.update(
    { "_id": poll_id, "answers.owner_id": owner_id }
    { "$set":{ "answers.answer": value } },
    function(err,numAffected) {

       if (err)
          throw err;        // or whatever handling

       // If this didn't modify anything then $push a document
       if ( numAffected != 0 ) {
           PollSchema.update(
               { "_id": poll_id },
               { "$push": { 
                   "answers": { 
                       "owner_id": owner_id,
                       "answer": value
                   }
               }},
               function(err, numAffected) {
                  // more things in here
               }
           );

    }
);

或者,如果你不关心每个人拥有一个以上的答案"然后只使用$push更新。