【问题标题】:how can I delete all the elements of a nested array within a mongo document using mongoose?如何使用 mongoose 删除 mongo 文档中嵌套数组的所有元素?
【发布时间】:2020-05-27 07:00:39
【问题描述】:

我是一个完整的 MERN 新手!我需要使用 mongoose 清除 mongo 文档中数组的所有对象。我找到的大多数答案只会根据给定的条件删除部分数组,但我想清除整个数组,以便我可以从用户输入中重新填充它。

文档:

 "_id": {
    "$oid": "5e3ff34551c1a940d23251d1"
},
"inter": {
    "significantEvents": []
},
"vigDataset": {
    "vigMovt": [
        {
            "Time": 2,
            "movt": 3
        },
        {
            "Time": 4,
            "movt": 5
        },
        {
            "Time": 6,
            "movt": 8
        },
        {
            "Time": 8,
            "movt": 8
        },
        {
            "Time": 9,
            "movt": 9
        },
        {
            "Time": 5,
            "movt": 5
        },
        {
            "Time": 10,
            "movt": 4
        },
        {
            "Time": 5,
            "movt": 6
        },
        {
            "Time": 9,
            "movt": 6
        },
        {
            "Time": 12,
            "movt": 3
        }
    ]

这是我在快递服务器上尝试过的,但没有成功:

   parRouter.route('/cleargraph/:parId')
.put((req, res, next) => {
  Par.findByIdAndUpdate(req.param.parId, {
    $pull: {"vigDataset.vigMovt"}
  })
  .then((par) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'application/json');
    res.json(par);
}, (err) => next(err))
.catch((err) => next(err));
})

这是来自 React 端:

  handleClearGraph =(e)=> {
  Axios.put(baseUrl + `par/cleargraph/${this.props.par._id}`)
  .then(response => {
    console.log( response)
})

【问题讨论】:

  • 它不起作用,但我觉得问题出在我设置路线的方式上,所以我想重构代码并再次尝试你的答案。谢谢
  • 在 db 上试试这个查询并告诉我.. 你的代码有问题试试这个:删除 next 并在 (req, res) =>{ 之前添加 async 并在 Par. 之前添加 await 然后你的代码应该可以工作..
  • 我刚刚在mongo shell上试了一下,还是不行,返回null
  • 你尝试了什么?
  • 非常感谢,在我发现我的代码问题后,它就像一个魅力!

标签: node.js mongodb express mongoose mongodb-query


【解决方案1】:

如果你想拉取一个数组的所有元素,那么你可以简单地将该数组值设置为[]

parRouter.route('/cleargraph/:parId')
    .put((req, res, next) => {
        Par.findByIdAndUpdate(req.param.parId, {
            $set: { "vigDataset.vigMovt": []}
            // You can use {$unset : {'vigDataset.vigMovt': 1}} to remove field 'vigMovt' inside 'vigDataset'
        })
            .then((par) => {
                res.statusCode = 200;
                res.setHeader('Content-Type', 'application/json');
                res.json(par);
            }, (err) => next(err))
            .catch((err) => next(err));
    })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多