Mongoose - 如何从数组元素中删除对象

时间:2017-09-17 09:49:06

标签: javascript node.js mongodb mongoose

用户可以添加语言。语言存储为userschema中类型为teach或learn的数组。我可以通过使用push将语言添加到languages.teach [],但是如何删除一个?

语言对象示例

AlertConfig

UserScema.js

let language = {
    "code": FR
    "level": 1
};

LanguagesController.js

var UserSchema = new Schema({

        email: {
            value: {
                type: String,
                lowercase: true,
                //unique: true,

            },
            token: String,
            verified: Boolean,
        },
        password: {
            type: String,
        },

        phone: {
            countryCode: {
                type: String,
                //required:true,
                unique: true,
            },
            number: {
                type: String,
                required: true
            },
            code: String,
            verified: {
                type: Boolean,
                default: false
            },
        },

        jwt: String,

        profile: {
            username: String,
            firstname: String,
            lastname: String,
            dob: String,
            level: Number,
            location: String,
            image: String,
            introduction: String,
        },
        languages: {
            teach: [],
            learn: [],
        }
    },
    {
        timestamps: {createdAt: 'created_at', updatedAt: 'updated_at'}
    });

我尝试使用.remove但是我得到了一个user.languages.teach [i] .remove不是一个函数。

2 个答案:

答案 0 :(得分:1)

也许像......

...
if (type === "teach") {
  var index = user.lanauges.teach.findIndex(function(item){
     return item.code === languge.code;
  });

  user.languages.teach.splice(index, 1);

  ....

答案 1 :(得分:1)

.remove数组上没有任何内容。您可以使用.filter删除不需要的数组元素。

它将被用作:

if (type === "teach") {
    user.languages.teach = user.languages.teach.filter( o => o.code !== language.code)
}

这将使用上面给出的条件从数组中删除所有元素。

详细了解Array.prototype.filter