我正在做一个学习项目,创建一个简单的Web应用程序来编写和存储todos,当时我遇到了一个问题,我无法删除MongoDB数据库中的条目.我创建了这个简单的JavaScript应用程序与mongoose模块重现问题.它创建"test"
对象与名称"test"
并将其存储在数据库.然后它删除所有对象与"test"
名称。正如你在屏幕截图上看到的,应用程序成功地创建和存储了对象,但忽略了删除它们,这是我的初始目标。
我提前感谢所有人的帮助。
Screenshot describing the problem
我的JavaScript代码:
const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const app = express();
mongoose.connect("mongodb://localhost:27017/testDB", {useNewUrlParser: true});
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));
const itemsSchema = new mongoose.Schema({
name: String
});
const Item = mongoose.model("Item", itemsSchema);
const item1 = new Item({
name: "test"
});
item1.save();
app.get("/", function(req, res){
console.log("get request received");
Item.deleteMany({name: "test"});
});
app.listen(3000, function(){
console.log("Server started on port 3000");
});
字符串
端子输出:
$ node app.js
(node:2868) [MONGODB DRIVER] Warning: useNewUrlParser is a deprecated option: useNewUrlParser has no effect since Node.js Driver version 4.0.0 and will be removed in the next major version
(Use `node --trace-warnings ...` to show where the warning was created)
Server started on port 3000
get request received
型
运行应用程序并发送GET
请求后的数据库条目:
testDB> db.items.find()
[
{ _id: ObjectId('658de5a4687d08a6d992f578'), name: 'test', __v: 0 },
{ _id: ObjectId('658de5df82d80828a24ef6ca'), name: 'test', __v: 0 },
{ _id: ObjectId('658de60b1fb7cb4857d913d3'), name: 'test', __v: 0 }
]
型
**已尝试:**deleteOne()和deleteMany()命令。
**预期发生:**删除数据库中所有名为“test”的元素。
**实际结果:**对象存储在数据库中,但不会删除元素。
1条答案
按热度按时间a11xaf1n1#
mongoose数据库操作需要使用它们的
then()
函数执行,或者使用async/await
执行,这允许它们的行为就像它们返回了一个已解决的promise,因为mongoose queries are not actually promisies。它们也可以使用exec()
函数执行,返回一个promise,并将按照这样的方式运行。如果你不使用then()
或async/await
,那么查询将不会执行。两个例子是:
字符串
或
型
这些给予你可以采用的两种异步模式,你可以在你的数据库查询中开始,但是当删除记录时,你应该在你的请求中传递一个资源标识符,比如文档的
ObjectId
,并使用适当的HTTP请求动词,比如app.delete
和app.post
。