【问题标题】:$pull seems to just set an element to null$pull 似乎只是将一个元素设置为 null
【发布时间】:2017-03-02 18:16:42
【问题描述】:

我正在尝试设置一个删除按钮,可以在其中删除课程中的课程。不过,使用 $pull 似乎只是将 course_id 设置为 null 。有没有办法完全删除该元素?

var classSchema = new Schema({
    title: { type: String, required: true },
    lessons: [{
        _id: false,
        lesson_id: {type: mongoose.Schema.Types.ObjectId, ref: 'Lesson'}
    }]
});

module.exports.deleteLesson = function(class_id, lesson_id, callback){
    Class.update(
        {'_id': class_id}, 
        { $pull: {lessons: {'lesson_id.$._id': lesson_id}}},
        callback
    )
}

例如

{ _id: 5808,
  title: 'cd',
  __v: 0,
  lessons: [ { lesson_id: [Object] }, { lesson_id: [Object] } ] }

变成

{ _id: 5808,
  title: 'cd',
  __v: 0,
  lessons: [ { lesson_id: null }, { lesson_id: [Object] } ] }

【问题讨论】:

  • 也许这会有所帮助stackoverflow.com/a/20275454/2931650
  • 我不认为 $ 在这种情况下是正确的运算符,而是应该使用 pullAll 如果你使用 { $pull: {lessons: {'lesson_id._id': course_id}}}或预感 { $pull: {lessons: {'lesson_id': course_id}}} ?

标签: node.js mongodb express mongoose mongodb-query


【解决方案1】:

如果您需要从课程中删除一个元素(这是一个数组),那么您只需执行从数组中删除元素然后执行保存操作。我编写了展示类似方法的代码。

Class.findOne({ _id: class_id }, function(err, cls) {   

          # Delete the element (for example, using underscore)
          cls.lessons = _.without(cls.lessons, class_id);

              cls.save(function (err) {     
                       callback(err);
             });
    });

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多