【发布时间】:2021-10-31 03:39:27
【问题描述】:
我有一个集合,其中包含有关我网站上的会议和用户的指标,我想按会议存储它们。每个会议有一个或多个用户,每个用户有一个或多个会话,每个会话有一个或多个指标。
这是我要保存的会议文档示例:
{
"conf":"conference12345",
"users":[
{ //User 1
"uid":"2dd8b4e3-9dcd-4da6-bc36-aa0988dc9642",
"sessions":[
[// User 1 => session 1
{
"ts": 1234567891,
"br":"Chrome 92",
"os":"Windows",
},
{
"ts": 1234567899,
"bw":100
}
],
[// User 1 => session 2
{
"ts": 1234567900,
"br":"Chrome 92",
"os":"Windows",
},
{
"ts": 1234567950,
"bw":500
}
],
]
},
{ //User 2
"uid":"2dd8b4e3-9dcd-4da6-bc36-aa0988dc9666",
"sessions":[
[// User 2 => session 1
{
"ts": 1234567891,
"br":"Chrome 90",
"os":"Mac",
},
{
"ts": 1234567899,
"bw":100
}
]
]
}
]
}
我想通过使用db.collection.update 和upsert 选项来一次插入新数据。但我很难弄清楚怎么做。指标应添加到“会话”数组的最后一个元素。
这是我要添加的数据示例:
// New user. a new document should be created because it's a new conference.
{
"conf": "conferenceXYZ",
"uid": "1cd8b4e3-9dcd-4da6-bc36-aa0988dc9512",
"metrics": {
"ts": 1234567891,
"br":"Chrome 90",
"os":"Mac",
}
}
// Existing user. metrics should be added to his last session
{
"conf": "conference12345",
"uid": "2dd8b4e3-9dcd-4da6-bc36-aa0988dc9642",
"metrics": {
"ts": 1234567891,
"bw":356
}
}
我尝试使用带有 upsert 选项的更新,但很难找到丢失的部分。任何帮助将不胜感激。
【问题讨论】:
标签: arrays mongodb upsert mongodb-update