Javascript 如何从深度嵌套文档中提取$pull(mongoose)

Javascript 如何从深度嵌套文档中提取$pull(mongoose),javascript,arrays,mongodb,object,mongoose,Javascript,Arrays,Mongodb,Object,Mongoose,我需要从位置数组中删除位置对象。它嵌套得很深。我遵循mongoose文档,但我的尝试没有成功: 列表=[{ “列表名”:“测试”, “_id”:“8d55f0afe545a0178c320706”, “列表ID”:“5fd9a3bef6c39b2f9c4df65b”, “日期”:“2020年12月15日”, “截止日期”:“2020-11-18”, “项目”:[ { “项目编号”:123, “说明”:“项目123”, “手头”:60, “_id”:“13dd1f26ecd2baeb61b3b4

我需要从位置数组中删除位置对象。它嵌套得很深。我遵循mongoose文档,但我的尝试没有成功:

列表=[{
“列表名”:“测试”,
“_id”:“8d55f0afe545a0178c320706”,
“列表ID”:“5fd9a3bef6c39b2f9c4df65b”,
“日期”:“2020年12月15日”,
“截止日期”:“2020-11-18”,
“项目”:[
{
“项目编号”:123,
“说明”:“项目123”,
“手头”:60,
“_id”:“13dd1f26ecd2baeb61b3b455”,
“地点”:[
{
“locationName”:“loc1”,
“计数”:10,
“_id”:“50a2c969465ba8010bd48977”
},
{
“locationName”:“loc2”,
“计数”:20,
_id:“51c2f1d25311dc8fabdbf604a59b”
},
{
“locationName”:“Loc3”,
“计数”:30,
_id:“7cb0c1f51a91c384846d65f8b2ae”
}
]
},

{more lists}
我在一个类似的数据库中尝试过这个方法,效果很好

List.updateOne({ "listId": yourListId },
        {
            '$pull': {
                'items.$[item].locations': { "_id": yourLocationId }
            }
        }, {
        "arrayFilters": [
            {
                "item._id": yourItemId
            }
        ]
    }, function (err) {
        if (err) {
            res.json(err)
        } else {
            res.json({ message: "Updated" })
        }
    })
}

您必须将数据库中要删除的对象的值放入数据库中

因此,如果要使用删除对象

“locationname”:“Loc3”

你应该使用

var yourListId = "5fd9a3bef6c39b2f9c4df65b";
var yourItemId = "13dd1f26ecd2baeb61b3b455";
var yourLocationId = "7cb0c1f51a91c384846d65f8b2ae";

试试看!

我在一个类似的数据库中试过,效果不错

List.updateOne({ "listId": yourListId },
        {
            '$pull': {
                'items.$[item].locations': { "_id": yourLocationId }
            }
        }, {
        "arrayFilters": [
            {
                "item._id": yourItemId
            }
        ]
    }, function (err) {
        if (err) {
            res.json(err)
        } else {
            res.json({ message: "Updated" })
        }
    })
}

您必须将数据库中要删除的对象的值放入数据库中

因此,如果要使用删除对象

“locationname”:“Loc3”

你应该使用

var yourListId = "5fd9a3bef6c39b2f9c4df65b";
var yourItemId = "13dd1f26ecd2baeb61b3b455";
var yourLocationId = "7cb0c1f51a91c384846d65f8b2ae";

试试看!

你真是个天才!谢谢你。它奏效了,我从阵列过滤器中学到了一些有价值的东西!你真是个天才!谢谢你。它奏效了,我从阵列过滤器中学到了一些有价值的东西!