从ObjectId数组中移除一个ObjectId

5

我有一个像这样的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匹配的那个? - steezeburger
2个回答

3

我有一个非常类似的设置,使用一个名为“事件”对象,其中包含保存为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"]。我错过了什么? - Diego
我不确定,我真的不了解lodash :( 如果我回答了问题,你能把我的答案标记为正确吗?你可以尝试把这个问题作为一个新问题来问... - Moshe Karmel

1

您需要将字符串传递给mongoose.Types.ObjectId('')以获取实际对象,以便进行比较。

因此,_.remove(unit.items, mongoose.Types.ObjectId(req.params.itemId));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接