Node.js / Mongoose - 从子集合中添加,更新和删除项目

时间:2013-09-16 06:57:36

标签: javascript node.js mongodb mongoose

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

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相当新,并且未能找到一个明确的例子,说明如何才能最好地实现这一目标。

非常感谢提前

1 个答案:

答案 0 :(得分: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);
        }
      });
    }
  }
);
相关问题