【问题标题】:Delete object from inner schema in mongoose?从猫鼬的内部模式中删除对象?
【发布时间】:2022-04-29 15:21:45
【问题描述】:

如何从猫鼬的内部架构中删除对象? 我尝试从假日模式中删除 cmets,这是假日模式:

const holidaySchema = new mongoose.Schema(
  {
    comments: [commentSchema],
  },
)
const Holiday = mongoose.model("Holiday", holidaySchema);


export default Holiday;

这是 cmets 架构:


const commentSchema = new mongoose.Schema(
  {
    action: { type: String },

    time: { type: String },

    name: { type: String },
    image: { type: String },

    content: { type: String },
    rating: { type: Number },
  },
  {
    timestamps: true,
  }
);


我尝试以这种方式从 holidaySchema 中删除特定评论:

holidayRouter.delete(
  "/:id/comments/:commentId",
  isAuth,
  expressAsyncHandler(async (req, res) => {
    const holiday = await Holiday.updateOne(
      { _id: req.params.id },
      { $pull: { comments: { _id: req.params.commentId } } }
    );
if(holiday){
  console.log(holiday);
}
  })
);


控制台:

这不起作用,你知道我做错了什么或者我应该怎么做吗?

谢谢

【问题讨论】:

  • 查询看起来不错,请确保您有该 ids 文档在集合中,假期中的控制台是什么?
  • 控制台显示一个待处理的promise,你能找到问题吗? link
  • 显然它会显示挂起,因为您没有在 api 中返回任何响应,我正在谈论这个console.log(holiday);,您可以在运行的节点服务器控制台中看到它。
  • 那我应该返回那里?
  • 看到nModified: 1的时候其实已经删除了,你的记录已经更新了。您可以检查数据库。

标签: mongodb mongoose mongodb-query mongoose-schema


【解决方案1】:

Mongoose 将对象转换为 json,我们可以自定义返回的那个 json。

 commentSchema.methods.toJSON = function(){
      const commentSchema = this.toObject()
    
      delete commentSchema.name
      delete commentSchema.rating
      
      return commentSchema 
    }

返回的新 JSON 将没有名称和评级。

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2018-10-09
    相关资源
    最近更新 更多