node.js - 使用 mongoose 通过 Id 查找和删除数组中的子文档
问题描述
我正在尝试使用 Mongoose 删除数组中的子文档。
我的数据:
{
"_id": {
"$oid": "5d88dfe45feb4c06a5cfb762"
},
"spaces": [{
"_id": {
"$oid": "5d88dfe45feb4c06a5cfb76f"
},
"name": "Building 2",
"subSpace": [{
"_id": {
"$oid": "5d88dfe45feb4c06a5cfb771"
},
"name": "Basement"
}, {
"_id": {
"$oid": "5d88dfe45feb4c06a5cfb770"
},
"name": "Floors"
}]
}, {
"_id": {
"$oid": "5d88dfe45feb4c06a5cfb76c"
},
"name": "Building 4",
"subSpace": [{
"_id": {
"$oid": "5d88dfe45feb4c06a5cfb76e"
},
"name": "Basement"
}, {
"_id": {
"$oid": "5d88dfe45feb4c06a5cfb76d"
},
"name": "Floors"
}]
}]
}
对于此示例,我们要删除Building 2中具有以下 _id的 subSpace Floors : 5d88dfe45feb4c06a5cfb771
我的代码(在模型中):
exports.removeSubSpaceById = (subSpaceId) => {
Residence.findOneAndUpdate( { "spaces.subSpace._id": '5d88dfe45feb4c06a5cfb771' },
{ $pull:
{ spaces:
{ subSpace:
{ _id: '5d88dfe45feb4c06a5cfb771' }}}}, function(err, result) {
console.log(result);
})
};
输出:console.log:我的整个文档但是 subSpace/Basement ( 5d88dfe45feb4c06a5cfb771 ) 仍在我的文档中。
谢谢你的帮助。
解决方案
使用位置运算符进行嵌套数组操作。MongoDb 文档
exports.removeSubSpaceById = (subSpaceId) => {
Residence.findOneAndUpdate({ "spaces._id": '5d88dfe45feb4c06a5cfb76f' },
{
$pull:
{
"spaces.$.subSpace": { _id: "5d88dfe45feb4c06a5cfb771" }
}
}, function (err, result) {
console.log(result);
})
}
推荐阅读
- django - 类别子类别 drf django
- php - Laravel Eloquent 条件与影响输出的“with”关系数据
- json - Flutter - 无法将所有 json 数据从 api 响应保存到 Iterable List 编辑:(无法从可迭代列表中获取数据)
- mysql - mysql根据数字更新列
- google-cloud-storage - sqoop将云SQL表作为parquet文件导入GCS存储桶需要哪些jar文件
- javascript - Javascript 遍历
- 列出并分配事件(onitemclick)处理程序不起作用 - 为什么?
- visual-studio-code - VSCode 工作区设置继承自默认设置而不是用户设置
- kubernetes - Kubernetes prometheues operator 与 helm chart 之间的区别
- android - react-native-geolocation-service 构建问题
- javascript - 为什么平滑滚动有效但仅在某些时候有效?