猫鼬发现已经删除的文档

时间:2018-07-25 09:52:30

标签: node.js database mongodb express mongoose

我的api中有一个端点,该端点会删除一个特定的文档:

exports.removeProduct = (req, res) => {
    const productId = req.params.productId
    Product.deleteOne({ _id: productId }, (err) => {
        // handle response
    })
}

由于已删除的文档不再在数据库中,因此此时应将其删除。 不过,我在调用此文件时会检索已删除的文档:

exports.getUnpublished = (req, res) => {
    var unpublishedProducts = []
    const userId = req.params.userId
    Product.find({ userId: userId, published: false }, (err, products) => {
        products.forEach((product) => {
            if (Number(product.createdAt) === Number(product.updatedAt)) {
                Product.remove({ _id: product._id }).exec();
            } else {
                unpublishedProducts.push(product)
            }
        })
        // handle response
    })
}

为进行解释:首先,我找到所有具有特定userId且尚未published的文档。然后,我遍历所有找到的文档,并删除所有从未更新过的文档。所有其他文档都被推入unpublishedProducts数组中。

奇怪的是,unpublishedProducts数组包含已被删除的文档。

P.S .:我注意到,重新启动服务器后,已删除的文档不再位于unpublishedProducts数组中。

1 个答案:

答案 0 :(得分:1)

您可以通过添加deleted: {type: Boolean, default: false}属性来更新产品架构。

removeProduct上,您可以使用

Product.updateOne({ _id: productId }, {$set: {deleted: true}}, (result) => {
        // handle response
})

要检索所有未删除的产品,可以使用此查询Product.find({deleted: {$ne: true}})