Javascript 更新数据库中深度嵌套数据的正确方法是什么
我有以下数据库结构: { 用户:{ 电邮:example@email.com, 天数:{ 第1天:{ 任务:{ 任务1:{ 名称:“sometask1, 声明:“假” } 任务2:{ 姓名:“sometask2, 声明:“假” } 任务3:{ 姓名:“sometask3, 声明:“假” } ... } ... } } } } 我的模式: //用户模式 const userSchema=new mongoose.Schema{ 电子邮件:String, 密码:String, 用户名:String, displayUserName:String, 天数:[{ 类型:对象, 参考:天 }] }; //日模式 const daySchema=newmongoose.Schema{ dayProgress:数字, totalTodos:数字, 任务:[{ 类型:对象, 参考:任务, }] }; //任务secmea const taskSchema=new mongoose.Schema{ 任务名称:{ 类型:字符串, 必填项:true }, 任务时间:{ 类型:日期, 必填项:true }, 任务状态:{ 类型:布尔型, 默认值:false }, 任务类型:{ 类型:对象, 默认值:{} } }; const User=mongoose.model'User',userSchema const Day=mongoose.model'Day',daySchema const Task=mongoose.modelstask,taskSchema 现在让我们假设一个用户想要添加一个新任务。。。更新tasks对象并防止整个数组的覆盖行为的最佳方法是什么 到目前为止,我尝试的是……但它覆盖了整个任务数组: const task=新任务{ taskName:“测试”, 任务时间:新日期, taskState:false, } 常数日=新的一天{ 每日进度:0, Todos总数:0, 任务:任务 } 常量dayObj={} dayObj['day 1']=天 db.findOneAndUpdate{ 电邮:'example@email.com' }, { $set:dayObj } 我得到的是: { 用户:{ 电邮:example@email.com, 天数:{ 第1天:{ 任务:{ 0: { 名称:'测试', 声明:“假” ... } //每次我添加任务时,它都会被覆盖 } } } } } 我要找的是: { 用户:{ 电邮:example@email.com, 天数:{ 第1天:{ 任务:{ 测试:{ 名称:'测试', 声明:“假” ... } //我可以把更多的任务推到这里 } } } } } 我知道我应该将值推送到tasks数组或类似的东西,但我不确定该怎么做谢谢您的时间您可以尝试以下查询:使用并推送到确切位置 注意:-我已经手动创建了数据并在下面的查询中进行了测试。我使用了_id和day._id来查找用户和任务需要推送的日期 之前 之后 希望这有帮助Javascript 更新数据库中深度嵌套数据的正确方法是什么,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有以下数据库结构: { 用户:{ 电邮:example@email.com, 天数:{ 第1天:{ 任务:{ 任务1:{ 名称:“sometask1, 声明:“假” } 任务2:{ 姓名:“sometask2, 声明:“假” } 任务3:{ 姓名:“sometask3, 声明:“假” } ... } ... } } } } 我的模式: //用户模式 const userSchema=new mongoose.Schema{ 电子邮件:String, 密码:String, 用户名:String,
db.update({
_id: ObjectId("5d51bd5ef5fc3d6486b40ffb"),
"days._id": ObjectId("5d51bd0ff5fc3d6486b40fe4")
}, {
$push: {'days.$.tasks': taskData}
});
{
"_id" : ObjectId("5d51bd5ef5fc3d6486b40ffb"),
"email" : "kk@kk.com",
"username" : "KK_KK",
"displayUserName" : "KK",
"days" : [
{
"_id" : ObjectId("5d51bd0ff5fc3d6486b40fe4"),
"dayProgress" : 1,
"totalTodos" : 2,
"tasks" : [
{
"_id" : ObjectId("5d51bcdef5fc3d6486b40fd2"),
"taskName" : "ABC",
"taskState" : false,
"taskTypes" : "NEW"
}
]
}
]
}
{
"_id" : ObjectId("5d51bd5ef5fc3d6486b40ffb"),
"email" : "kk@kk.com",
"username" : "KK_KK",
"displayUserName" : "KK",
"days" : [
{
"_id" : ObjectId("5d51bd0ff5fc3d6486b40fe4"),
"dayProgress" : 1,
"totalTodos" : 2,
"tasks" : [
{
"_id" : ObjectId("5d51bcdef5fc3d6486b40fd2"),
"taskName" : "ABC",
"taskState" : false,
"taskTypes" : "NEW"
},
{
"taskName" : "ABC1",
"taskState" : true,
"taskTypes" : "OLD"
}
]
}
]
}