0

我在基于节点的 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 还很陌生,并且一直无法找到一个明确的例子来说明如何最好地实现这一点。

提前谢谢了

4

1 回答 1

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);
        }
      });
    }
  }
);
于 2013-09-16T09:56:22.323 回答