我有一个连接到mongodb数据库的服务器。当我添加一级数据然后保存时,它可以工作。
例如:
// this works fine
router.post('/user/addsomedata', async (req,res)=>{
try {
const user = await User.findOne({email : req.body.email})
user.username = req.body.username
await user.save()
res.send()
} catch(e) {
res.status(404).send(e)
}
})
但是,如果我尝试使用更深层次的数据保存对象,则不会保存该对象。我猜没有检测到更新,因此没有替换用户。
示例:
router.post('/user/addtask', auth ,async (req,res)=>{
const task = new Task({
name : req.body.name,
timing : new Date(),
state : false,
})
try {
const day = await req.user.days.find((day)=> day.day == req.body.day)
// day is found with no problem
req.user.days[req.user.days.indexOf(day)].tasks.push(task)
// console.log(req.user) returns exactly the expected results
await req.user.save(function(error,res){
console.log(res)
// console.log(res) returns exactly the expected results with the data filled
// and the tasks array is populated
// but on the database there is nothing
})
res.status(201).send(req.user)
} catch(e) {
res.status(400).send(e)
}
})
因此,即使在保存回调之后,我仍然在控制台上填充了task数组,但在this上却什么也没有
答案 0 :(得分:0)
您正在根据请求来处理用户,同时应该像第一个示例(User.findOne
)一样首先从数据库中找到用户,然后更新并保存该模型。
答案 1 :(得分:0)
每当要更新猫鼬返回的结果时,在查找查询中使用 .lean()。猫鼬默认情况下返回不可变的实例对象。带有find的 lean()方法返回可以修改/更新的普通js对象。
例如使用lean()
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(38, GPIO.IN)
while True:
if GPIO.input(38) == 1:
print('aan')
您可以了解有关精益here
的更多信息希望这会有所帮助:)