我正在研究mongodb,并将数据库结构设为:
{
"_id" : ObjectId("5e9fef05c0228a50befba0d7"),
"name" : "sanghm",
"id" : "3456",
"dep" : {
"dep1" : "ops",
"dep2" : "analytics"
},
"data" : [
{
"date" : "25-apr-2020",
"log" : [
{
"machine" : "windows-user1",
"task" : "excel",
"time": "10:00am"
}
{
"machine" : "windows-user1",
"task" : "email",
"time": "11:00am"
}
]
}
]
}
将每个新任务推送到数据库中,我正在使用类似的查询
date = '25-apr-2020'
db.inventory.update({id:'3456'},{{$push:{'data.$[t].log':{machine:'windows-user1',task:'new task',time:'3:00pm'}}},{arrayFilters:[{"t.date":date}]}})
此查询将新任务推送到日期数组。如果日期更改为“ 26-apr-2020”,那么我们可以使用相同的查询来首先添加新的归档日期,然后再推送相同的数据。
我已经阅读了有关{upsert: true}
的信息,但在我的情况下不知道如何使用它
双重嵌套很奇怪。通常,所有事件都将被平坦地存储在顶层data
数组中,并且一个事件将在查询时按日期(如果需要)进行分组。