节点.js / 猫鼬 - 从子集合中添加、更新和删除项目

Node.js / Mongoose - Adding, Updating and Deleting items from sub collection

本文关键字:添加 更新 删除项目 子集合 js 猫鼬 节点      更新时间:2023-09-26

我在基于节点的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相当陌生,一直无法找到如何最好地实现这一目标的明确例子。

提前非常感谢

首先,我将假设您已经使用如下内容构建了一个模型:

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);
        }
      });
    }
  }
);