我想在属性调用案例中保存大量数据。我要做的是迭代要存储的数据列表,然后将每个数据添加到文档的属性中。但是问题是每个数据都存储了两次。我在github上发现了一个有同样问题的人,他说问题出在nodemon上,但是我又再次在没有nodemon的情况下运行了服务器,这是同样的问题。
还在堆栈中发现一个问题,当应用回调时,它将导致两次保存,这与我的情况不同:
Why does using mongoose callback result in saving data twice?
我尝试删除回调,但是仍然存在相同的问题。 (我不认为回调可以做到这一点)
这是代码:
var UserSchema = Schema({
user: {type: String},
password: {type: String},
name: {type: String},
privilege: {type: String},
cases: {type: Array}
})
var user = db.model('User', UserSchema , "users");
app.post("/addCases", function(req, res){
user.find({user: req.body.user}, async function(err, doc) {
if(err) {
console.log(err);
} else {
for (const iterator of req.body.list) {
await user.updateOne({user: req.body.user},
{ $push: {cases: iterator}}, {useFindAndModify: false}, function(err, raw) {
if(err) {
console.log(err);
} else {
console.log(value + ' <----- Value');
}
});
}
}
});
});
答案 0 :(得分:1)
我认为您的问题可能与您未结束服务器代码中的请求有关。在对数据库进行修改之后,您应该向前端发送一个响应,否则,它可能会尝试重复该请求,最终您的端点将被调用两次。
尝试类似的东西:
app.post("/addCases", function(req, res){
user.find({user: req.body.user}, async function(err, doc) {
if(err) {
console.log(err);
} else {
for (const iterator of req.body.list) {
await user.updateOne({user: req.body.user},
{ $push: {cases: iterator}}, {useFindAndModify: false}, function(err, raw) {
if(err) {
console.log(err);
} else {
console.log(value + ' <----- Value');
}
});
}
}
// New code
res.json({ ok: true });
});
});