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

Posted

技术标签:

【中文标题】在 Mongoose 中设置或创建嵌入文档【英文标题】:Set or create embedded document in Mongoose 【发布时间】:2014-07-13 05:03:03 【问题描述】:

我有一个架构如下:

/**
 * 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】:

“设置或创建”这个术语有点打开了这一点。

基本上,您将使用$push 运算符和.update() 在数组中添加(创建)新项目,或者在@987654326 之后拥有当前文档后使用标准javascript 数组推送@。

但考虑到您可能想要“更新”给定所有者的现有答案,那么这可能是一个两步操作。如果没有,那么您只需要使用$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 更新即可。

【讨论】:

以上是关于在 Mongoose 中设置或创建嵌入文档的主要内容,如果未能解决你的问题,请参考以下文章

在不使用 X-Windows 的情况下在 Linux 中设置或读取 Caps Lock 状态

如何在Vuejs单元测试中设置或测试。$ parent?

如何使用 Mongoose 创建遵循模型的嵌入式文档?

Mongoose 单个嵌入子文档默认

NestJS - 使用 mongoose 使用枚举嵌入嵌套文档

在 JavaScript 中设置或更改 PHP 变量