Mongoose - 如何从数组元素中删除对象[重复]
Posted
技术标签:
【中文标题】Mongoose - 如何从数组元素中删除对象[重复]【英文标题】:Mongoose - How To Remove Object From Array Element [duplicate] 【发布时间】:2018-02-26 00:16:33 【问题描述】:用户可以添加语言。语言在用户模式中存储为类型为教或学习的数组。我可以简单地使用 push 将一种语言添加到languages.teach[],但是如何删除一种语言?
语言对象示例
let language =
"code": FR
"level": 1
;
UserScema.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'
);
LanguagesController.js
destroy(req, res)
let id = req.params.id;
let language =
"code": req.body.code,
"level": req.body.level
;
let type = req.params.type;
User.findOne('_id': id, function (err, user)
if (err)
return res.status(404).json(
success: true,
status: 404,
data: err,
message: "User does not exist",
);
if (type === "teach")
for (let i = 0; i < user.languages.teach.length; i++)
if (user.languages.teach[i].code === language.code)
user.languages.teach[i].remove();
break;
if (type === "learn")
//user.languages.learn.push(language);
console.log(user);
user.save((err, user) =>
return res.status(200).json(
success: true,
status: 201,
data: user,
message: "Successfully Deleted Language",
);
);
);
我尝试使用 .remove 但我得到了 user.languages.teach[i].remove 不是一个函数。
【问题讨论】:
尝试user.languages.teach = user.languages.teach.filter( o => o.code !== language.code)
,而不是if (type === "teach")
中的for循环
那是做什么的,我使用类型,因为我想根据用户输入更改语言数组,如果你想操作类型 == 教学或类型 == 学习,请使用相同的代码..
对不起,如果我不清楚,但我不是说要删除你的 if 条件,我是说要删除 if (type === "teach")
内的 for 循环,上面给出的 sn-p。
【参考方案1】:
是的 .remove
在阵列上没有任何内容。您可以使用.filter
删除不需要的数组元素。
它会像这样使用:
if (type === "teach")
user.languages.teach = user.languages.teach.filter( o => o.code !== language.code)
这将删除符合上述条件的数组中的所有元素。
阅读更多关于Array.prototype.filter的信息。
【讨论】:
现在想知道子文档是否是更好的方法?【参考方案2】:也许是……
...
if (type === "teach")
var index = user.lanauges.teach.findIndex(function(item)
return item.code === languge.code;
);
user.languages.teach.splice(index, 1);
....
【讨论】:
嗨,这很有效,而且很容易理解。但我选择了 Raghavgarg 方法,因为它更简单。以上是关于Mongoose - 如何从数组元素中删除对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 mongoose 5.12 从数组中删除对象($pull 不起作用)