javascript Mongoose -删除文档无响应

des4xlb0  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(114)

我尝试使用Mongoose(MongoDB JS库)创建一个基本的数据库,但我不知道如何删除文档/项目,我不知道他们的技术术语是什么。
一切看起来都很好,当我使用Item.findById(result[i].id)时,它返回一个有效的项目id,但是当我使用Item.findByIdAndDelete(result[i].id)时,函数似乎根本没有启动。
这是我的代码片段:(提前为不好的缩进道歉)

const testSchema = new schema({
    item: {
        type: String,
        required: true
    },
    detail: {
        type: String,
        required: true
    },
    quantity: {
        type: String,
        required: true
    }
})

const Item = mongoose.model("testitems", testSchema)


        Item.find()
           .then((result) => {
                for (i in result) {
                    Item.findByIdAndDelete(result[i].id), function(err, result) {
                        if (err) {
                            console.log(err)
                        }
                        else {
                            console.log("Deleted " + result)
                        }
                    }
                }
                mongoose.connection.close()
            })
            .catch((err) => {
                console.log(err)
            })

我不知道我做错了什么,我还没有能够在互联网上找到任何东西。
任何帮助都很感激,谢谢。

nvbavucw

nvbavucw1#

_id是MongoDB文档中的一个特殊字段,默认类型为ObjectId。Mongoose会自动为您创建此字段。因此,testitems集合中的示例文档可能如下所示:

{
  _id: ObjectId("..."),
  item: "xxx",
  detail: "yyy",
  quantity: "zzz"
}

但是,您可以使用id来检索该值,即使该字段名为_id,您也会得到一个值,原因是Mongoose为id创建了一个虚拟getter:
默认情况下,Mongoose会为每个模式分配一个id虚拟getter,它会将文档的_id字段转换为一个字符串,或者在ObjectIds的情况下,返回其hexString。如果您不希望将id getter添加到您的模式中,可以在模式构建时通过传递此选项禁用它。
关键的一点是,当你用id得到这个值时,它是一个字符串,而不是ObjectId,因为类型不匹配,MongoDB不会删除任何东西。
要确保值和类型匹配,应使用result[i]._id

相关问题