【问题标题】:Remove an ObjectId from an array of objectId从 objectId 数组中删除 ObjectId
【发布时间】:2015-12-16 01:29:10
【问题描述】:

我有一个这样的 objectId: ["56153e4c2040efa61b4e267f","56033932efefe0d8657bbd9e"] 为了将这些信息保存在我的模型中,我使用:

items: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Items'
}]

我想要做的是拉取数组的一个元素,该元素等于我在删除请求中从前端发送的 objectId。

我正在使用的代码:

_.remove(unit.items, request.params.itemId);

我正在使用 lodash 库。

我想的问题是数组有 ObjectId 元素,我试图与一个字符串进行比较,即 request.params.itemId。

【问题讨论】:

  • 您是要从数组中删除一个数组,还是您有一个文档数组,并且您想删除与您的 req.params.itemId 匹配的文档?

标签: javascript node.js mongoose lodash


【解决方案1】:

我有一个非常相似的设置,其中包含一个“事件”对象,该对象具有一个保存为 ObjectId 数组的“分配”对象数组。我能够简单地使用

obj.arrayField.remove(idToRemove);

这是我的删除路由处理程序中的相关代码:

var id = req.assignment._id;
req.event.assignments.remove(id);
req.event.save(function(err, event) {
    //etc 
}

这对你有用吗?

unit.items.remove(request.params.itemId);

【讨论】:

  • 谢谢@MosheKarmel,效果很好,现在如果我想有所作为,可以说我有一个数组 oldItems = ["56153e4c2040efa61b4e267f","56033932efefe0d8657bbd9e"] 和另一个数组 newItems =["56033932efefe0d8657bbd9e]" ,我正在尝试使用像这样的 lodash 差异函数,_.difference(oldItems, newItems) 但结果是 ["56153e4c2040efa61b4e267f","56033932efefe0d8657bbd9e"]。我错过了什么?
  • 我不确定,我真的不知道 lodash :( 如果我回答了这个问题,你能将我的答案标记为正确吗?你可以尝试将其作为一个新问题提出......跨度>
【解决方案2】:

您需要将字符串传递到mongoose.Types.ObjectId('') 以获取可以比较的实际对象。

所以_.remove(unit.items, mongoose.Types.ObjectId(req.params.itemId));

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 2016-10-04
    • 2017-09-09
    • 2018-11-19
    • 1970-01-01
    • 2019-06-25
    • 2019-01-13
    • 2017-11-04
    • 2018-08-13
    相关资源
    最近更新 更多