Mongodb 具有可变用户id的文档的架构

Mongodb 具有可变用户id的文档的架构,mongodb,nosql,Mongodb,Nosql,我从许多机器上获得了这样的数据,我们称之为事件,我想把它们放到mongodb中: 稍后,这个用户可以更改他的机器,并为他生成新的id-user\u sid 具有新用户\u sid的新条目 `event` { "payload":"xxxxxxxxxxxx", "user":{ "user_sid":"S-1-5-21-2242820312-3698568055-2602798999-5555", "user_login":"john1"

我从许多机器上获得了这样的数据,我们称之为事件,我想把它们放到mongodb中:

稍后,这个用户可以更改他的机器,并为他生成新的id-user\u sid

具有新用户\u sid的新条目

   `event`
   {
    "payload":"xxxxxxxxxxxx",
    "user":{  
      "user_sid":"S-1-5-21-2242820312-3698568055-2602798999-5555",
      "user_login":"john1"
     }
   }
因此,更改后的所有历史数据不能在查询中与新数据关联

我有两个想法来处理这个问题:

首先是使collection.users用于保存用户\u SID,并将user.\u id链接到事件集合

当出现具有新用户\u sid的新事件时,将添加新用户并 新事件将与新用户\u sid链接

然后,应用程序用户将能够识别john1已更改用户的sid,并可以合并这些用户

旧user.user_sid将替换为新的,因此历史数据中的旧id引用无需更改,新事件将获得_id 将使用更新的旧user.user_sid和新user.user_sid 删除

第二种方法是使collection.users用于保存用户的SID,但在事件中不引用它。collection.users将保留特定用户的每个新用户\u sid,并在查询中放置该用户的所有用户\u sid


因为我刚刚开始使用NoSQL,所以我需要一个更好的建议?

我认为您可以在事件文档中添加一个用户id:

{
    "payload" : "xxxxx",
    "user" : {
        "user_sid" : "9rjvq835hgq0845uhr",
        "_id" : 1231231231,
        "user_login" : "john1"
    }
}
用户\u sid字段的路径为user.user\u sid。我认为最好只称它为sid,因为从嵌入的角度看,与用户的关联是显而易见的,不需要在名称中重复

好的,但是,相同用户的事件可以出现,但sid不同。然后我得到了同一个用户的两个user_sid条目。没关系。然后管理员可以注意到这些SID是同一个用户,并将用户文档合并到一个SID中。因此,应更新所有旧用户sid
{
    "payload" : "xxxxx",
    "user" : {
        "user_sid" : "9rjvq835hgq0845uhr",
        "_id" : 1231231231,
        "user_login" : "john1"
    }
}