为什么我的路线deleteMany在Mongoose中不起作用

问题描述 投票:0回答:1

我正在尝试构建一条路线来删除所有具有实体

"techs":[]
的对象。

我正在训练 mongoose 并在发生错误的地方犯了一个错误,并且我向 API 发送了错误的信息。

所以,我构建了代码:

router.delete("/delete", connectDatabase, async (req, res, next) => {
  try {
    const resDB = await SchemaProjects.deleteMany({ techs: [] });
    res.status(200).json({
      status: "OK",
      statusMensagem: "Projects sucefully deleted",
      response: resDB,
    });
  } catch (error) {
    res.status(500).json("internal server error");
  }
});

但它会捕获并返回:

“内部服务器错误”。

我的API...

[
    {
        "_id": "6589873d4e3eb0cee59435dc",
        "type": "landing",
        "title": "Google Clone",
        "description": "Google Clone landinpg page",
        "techs": [],
        "imageUrl": "https://i.ibb.co/wp9mHmq/google.png",
        "__v": 0
    },
    {
        "_id": "658dc7bb77d42309479a0d79",
        "type": "landing",
        "title": "Google Clone",
        "description": "Google Clone landinpg page",
        "techs": [],
        "imageUrl": "https://i.ibb.co/wp9mHmq/google.png",
        "__v": 0
    },
    {
        "_id": "658dc7bd77d42309479a0d7b",
        "type": "landing",
        "title": "Google Clone",
        "description": "Google Clone landinpg page",
        "techs": [],
        "imageUrl": "https://i.ibb.co/wp9mHmq/google.png",
        "__v": 0
    },
    {
        "_id": "658de1f581c1748f5c5ce802",
        "type": "landing",
        "title": "Google Clone",
        "description": "Google Clone landinpg page",
        "techs": [],
        "imageUrl": "https://i.ibb.co/wp9mHmq/google.png",
        "__v": 0
    },
]

让我困惑的是,这就是它的工作原理......

router.get("/get", connectDatabase, async (req, res, next) => {
  try {
    const resDB = await SchemaProjects.find({ techs: [] });
    res.status(200).json({
      status: "OK",
      statusMensagem: "Project sucefully deleted",
      response: resDB,
    });
  } catch (error) {
    res.status(500).json("internal server error");
  }
});

并且API正确返回数据,相同的实体和值(

{ techs: [] }
)

javascript node.js mongodb mongoose routes
1个回答
0
投票

要删除数组为空的文档,您应该使用

$size
运算符来检查长度为 0 的数组,如下所示:

const resDB = await SchemaProjects.deleteMany({ techs: { $size: 0 } });

或者使用查询生成器语法:

const resDB = await SchemaProjects.where('techs').size(0).deleteMany();
© www.soinside.com 2019 - 2024. All rights reserved.