从特定文档中删除子文档会导致Mongoose,MongoDB失败

时间:2017-11-03 14:56:33

标签: mongodb mongoose

我正在尝试从我的应用中的特定文档中删除子文档,但是我没有收到预期的结果。数据以下列格式存储:

    {"_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 }

任何建议或指示都会很棒,

谢谢!

1 个答案:

答案 0 :(得分:1)

我已经成功解决了这个问题,并将我的答案添加为参考,以防其他人对此感到困惑。

Region.update({_ id:req.params.reg},{$ pull:{" products":req.params.id}}

这段代码对我有用吗。

希望如果其他人发现类似的问题,这会有所帮助!

相关问题