通常,我可以从MongoDB中查询一个项目,像修改其他对象一样修改它,然后调用保存方法将其保存到数据库中。但是,它对我的模式数组不起作用。我在这方面没有太多经验,所以请对我温柔一些。
以下是相关的模式:
const bracketClicksSchema = new mongoose.Schema({
bracketID: String,
duo1Click: Boolean,
duo2Click: Boolean,
duo3Click: Boolean,
duo4Click: Boolean,
duo5Click: Boolean,
duo6Click: Boolean,
duo7Click: Boolean
});
const userSchema = new mongoose.Schema({
userId: String,
brackets: [bracketClicksSchema]
});
以下是用户模型:
const User = mongoose.model('User', userSchema);
这就是我尝试创建一个新用户并填充bracketClicksSchema数组的方法。console.log()语句显示对象被正确地更改,但是再次从数据库调用它显示它实际上还没有保存到MongoDB。
app.post('/api/user', async (req, res) => {
let user = await User.findOne({
userId: req.body.id
});
if (user.brackets == null || user.brackets[0].bracketID != req.body.date1) {
user = new User({
userId: req.body.id,
brackets: [
{
bracketID: req.body.date1,
duo1Click: false,
duo2Click: false,
duo3Click: false,
duo4Click: false,
duo5Click: false,
duo6Click: false,
duo7Click: false
},
{
bracketID: req.body.date2,
duo1Click: false,
duo2Click: false,
duo3Click: false,
duo4Click: false,
duo5Click: false,
duo6Click: false,
duo7Click: false
},
{
bracketID: req.body.date3,
duo1Click: false,
duo2Click: false,
duo3Click: false,
duo4Click: false,
duo5Click: false,
duo6Click: false,
duo7Click: false
},
]
});
}
console.log("new user: " + user);
try {
await user.save();
res.send(user);
} catch (error) {
console.log(error);
}
// Check if saved successfully
user = await User.findOne({
userId: req.body.id
});
console.log("finding user again: " + user);
});
控制台语句:
new user: {
userId: '1234',
brackets: [
{
bracketID: '2023-02-05',
duo1Click: false,
duo2Click: false,
duo3Click: false,
duo4Click: false,
duo5Click: false,
duo6Click: false,
duo7Click: false,
_id: new ObjectId("63e01fa1ae236745bf8ce09c")
},
{
bracketID: '2023-02-04',
duo1Click: false,
duo2Click: false,
duo3Click: false,
duo4Click: false,
duo5Click: false,
duo6Click: false,
duo7Click: false,
_id: new ObjectId("63e01fa1ae236745bf8ce09d")
},
{
bracketID: '2023-02-03',
duo1Click: false,
duo2Click: false,
duo3Click: false,
duo4Click: false,
duo5Click: false,
duo6Click: false,
duo7Click: false,
_id: new ObjectId("63e01fa1ae236745bf8ce09e")
}
],
_id: new ObjectId("63e01fa1ae236745bf8ce09b")
}
finding user again: {
_id: new ObjectId("63b9b3da9e19eabef4d4987b"),
userId: '1234',
brackets: null,
__v: 0
}
如何成功地将我创建的新用户对象保存到MongoDB?
2条答案
按热度按时间pb3s4cty1#
你忘了
populate('brackets')
w8ntj3qf2#
您正在创建一个新用户,用户名与从前端传过来的
userId
相同,创建后,数据库中将存在多个用户名相同。由于您使用的是
findOne()
查询,因此只返回第一个匹配的用户。尝试改用
find()
查询,并检查新用户是否存在于您将返回的数组中。