【问题标题】:Node.js / Mongoose - Adding, Updating and Deleting items from sub collectionNode.js / Mongoose - 从子集合中添加、更新和删除项目
【发布时间】:2013-09-16 17:56:22
【问题描述】:

我在基于节点的 Web 应用程序中有以下架构,使用 mongoose。

var headerSchema = new mongoose.Schema({
    name: String,
    values: String,
    state: String
});

var responseSchema = new mongoose.Schema({
    name: String,
    responseText: String,
    active: String
});

var requestSchema = mongoose.Schema({
    id: String,
    name: String,
    description: { type: String },
    url: String,
    verb: String,
    createdAt: { type: Date, default: Date.now },
    headers: [headerSchema],
    body: String,
    responses: [responseSchema]
});

请求模式是作为集合存储在 mongo 数据库中的模式,标头模式和响应模式是它的子集合。

我面临的问题是了解如何更新请求架构文档,从其中一个子集合(例如 responseSchema)中添加、更新和删除项目的最佳方法是什么。

我对 mongo 还很陌生,一直无法找到一个明确的例子来说明如何最好地实现这一点。

在此先感谢

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    我首先假设您已经使用类似这样的东西构建了这个模型:

    var request = mongoose.model( 'request', requestSchema );
    

    当您的模型可用时,Mongoose 提供了一些帮助方法来处理子文档。首先,请注意,当您创建子文档时,Mongoose 会自动为其分配一个唯一的 _id 标识符。您需要知道这是什么才能更新或删除给定的子文档。

    下面的快速示例概述了主要方法。这假设您知道:

    • requestID - 请求的唯一 _id
    • headerID - 标题子文档唯一的_id

    request.findById( requestID, 
      function (err, request) {
        if(!err){
    
          // 1: Add a new header
          request.headers.push({
            name: "My header name"
          });
    
          // 2: Modify a specific header
          var thisHeader = request.headers.id(headerID);
          request.headers.nam = "My header name";
    
          // 3: Delete a specific header
          var thisHeader = request.headers.remove(headerID);
    
          request.save(function (err, request){
            if(!err){
              console.log('request saved: ' + request);
            }
          });
        }
      }
    );
    

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多