我正在尝试从我的应用中的特定文档中删除子文档,但是我没有收到预期的结果。数据以下列格式存储:
{"_id": "59fc7eccf0579ad8882b54bb",
"__v": 0,
"name": "manchester",
"products": [
{
"_id": "59fc7eccf0579ad8882b54bf",
"__v": 0,
"urn": "test01",
"category": "cat1",
},
{
"_id": "59fc7eccf0579ad8882b54c0",
"__v": 0,
"urn": "test02",
"category": "cat1",
},
{
"_id": "59fc7eccf0579ad8882b54c1",
"__v": 0,
"urn": "test03",
"category": "cat2",
},
{
"_id": "59fc7eccf0579ad8882b54c2",
"__v": 0,
"urn": "test04",
"category": "cat2",
}
]
},
{
"_id": "59fc7eccf0579ad8882b54bc",
"__v": 0,
"name": "leeds",
"products": [
{
"_id": "59fc7eccf0579ad8882b54bf",
"__v": 0,
"urn": "test01",
"category": "cat1",
},
{
"_id": "59fc7eccf0579ad8882b54c0",
"__v": 0,
"urn": "test02",
"category": "cat1",
},
{
"_id": "59fc7eccf0579ad8882b54c1",
"__v": 0,
"urn": "test03",
"category": "cat2",
},
{
"_id": "59fc7eccf0579ad8882b54c2",
"__v": 0,
"urn": "test04",
"category": "cat2",
}
]
}
存在多个区域,并且每个区域中存储相同的产品。我希望能够从每个地区删除产品,但将其保留在其他地区。
我尝试了以下内容:
const item = await Region.find({ "_id": req.params.reg }).populate('products', null, {
_id: { $in: req.params.id }}).exec();
await item[0].products[0].remove()
await item[0].products[0].save();
res.json(item);
然而,这会从所有地区移除产品。我还试图在Update()上使用$ pull,采用以下格式,但我无法使其工作。
await Region.update({ "_id": req.params.reg }, { "$pull": { "products": {"_id": req.params.id } } });
res.redirect("/regions");
此处,重定向工作正常,没有错误。如果我在console.log中输出,我收到以下内容:
{ n: 1, nModified: 0, ok: 1 }
任何建议或指示都会很棒,
谢谢!
答案 0 :(得分:1)
我已经成功解决了这个问题,并将我的答案添加为参考,以防其他人对此感到困惑。
Region.update({_ id:req.params.reg},{$ pull:{" products":req.params.id}}
这段代码对我有用吗。
希望如果其他人发现类似的问题,这会有所帮助!