我尝试使用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)
})
我不知道我做错了什么,我还没有能够在互联网上找到任何东西。
任何帮助都很感激,谢谢。
1条答案
按热度按时间nvbavucw1#
_id
是MongoDB文档中的一个特殊字段,默认类型为ObjectId
。Mongoose会自动为您创建此字段。因此,testitems
集合中的示例文档可能如下所示:但是,您可以使用
id
来检索该值,即使该字段名为_id
,您也会得到一个值,原因是Mongoose为id
创建了一个虚拟getter:默认情况下,Mongoose会为每个模式分配一个
id
虚拟getter,它会将文档的_id
字段转换为一个字符串,或者在ObjectIds的情况下,返回其hexString。如果您不希望将id
getter添加到您的模式中,可以在模式构建时通过传递此选项禁用它。关键的一点是,当你用
id
得到这个值时,它是一个字符串,而不是ObjectId
,因为类型不匹配,MongoDB不会删除任何东西。要确保值和类型匹配,应使用
result[i]._id
。