我最初为事件数据库开发了一个模式,如下所示:
{ events: { eventid :
{
userid : availability
}
}
这对于插入数据非常有效(我使用键作为数据,如您所见)。 upsert只会创建一个新记录,或者使用点表示法更新数据,因为在我的情况下所有数据都必须是唯一的。
这很好,除了我必须查询,例如,用户通过不同事件的所有可用性 - 我无法通过查询来做,不得不诉诸循环来查找数据。
所以我考虑使用以下架构:
{ events : [
{
id : 'event1',
usersavailable : [{user : 'a', availability : 'x'},
{user : 'a', availability : 'x'}]
]
}
}
我的问题是:
a)我可以保留第一个设计,但仍然可以查询可用性的数量'用户有没有迭代循环?
b)如果没有,我是否需要两个操作来在第二个模式的useravailable
数组下复制唯一的{user,availability}对?如果用户(或事件)不存在,我是否需要多个操作来插入用户/可用性对?
c)使用第二个模式,如何搜索给定用户的所有可用性?
非常欢迎任何提示! (如果你可以使用pymongo来展示它,甚至更好......;)
更新:
我的想法是我可以更新用户'他们改变主意的可用性。使用第一个架构,我只需:
db.events.update({},{'events.eventid.userid.availability':'noon'},upsert=True)
另一方面,我想第二个架构会更好,以便找到用户的所有可用性信息,但我不知道如何做到这一点。在这两种模式中,使用循环很容易做到这一点,但我不知道如何查询它。
答案 0 :(得分:0)
使用聚合,您可以使用addToSet()创建第二种形式的数组(如果适用于您)。