【发布时间】:2021-10-07 23:27:00
【问题描述】:
此处已对此进行了广泛介绍,但似乎没有一个解决方案对我有用。我正在尝试使用该对象的 id 从数组中删除一个对象。目前,我的架构是:
const scheduleSchema = new Schema({
//unrelated
_id: ObjectId
shifts: [
{
_id: Types.ObjectId,
name: String,
shift_start: Date,
shift_end: Date,
},
],
});
我已经尝试了几乎所有类似的变体:
.findOneAndUpdate(
{ _id: req.params.id },
{
$pull: {
shifts: { _id: new Types.ObjectId(req.params.id) },
},
}
);
数据库:
在这些变体中,我得到的通常响应是空数组或 null。
我稍微找到了解决这个问题的方法,并通过利用 Schema 的主 _id 完成删除(而不是嵌套的:
.findOneAndUpdate(
{ _id: <main _id> },
{ $pull: { shifts: { _id: new Types.ObjectId(<nested _id>) } } },
{ new: true }
);
但我希望通过使用嵌套的 _id 找到一种方法。有什么建议吗?
【问题讨论】:
-
您使用相同的值 (
req.params.id) 搜索_id和shifts._id。这是正确的还是它们是不同的_id's?也许您正在寻找:{ 'shifts._id': req.params.id }在您的查询中, -
刚刚更新。往上看。我以前使用相同的值,但能够通过使用条目的最高嵌套 _id 来完成删除。不过,我仍然想知道是否有更好的方法来实现这一点。
-
啊,是的。我明白你的意思了。这似乎奏效了。谢谢! .findOneAndUpdate( { 'shifts._id': new Types.ObjectId(req.params.id) }, { $pull: { shifts: { _id: new Types.ObjectId(req.params.id) }, }, }, { 新:真 } );
-
如果你愿意,我可以添加一个答案以更好地解释我的评论。
-
是的,拜托!那太好了。