Mongodb和文档数组中的数组

时间:2015-11-10 11:45:03

标签: arrays mongodb

我最初为事件数据库开发了一个模式,如下所示:

{ 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)

另一方面,我想第二个架构会更好,以便找到用户的所有可用性信息,但我不知道如何做到这一点。在这两种模式中,使用循环很容易做到这一点,但我不知道如何查询它。

1 个答案:

答案 0 :(得分:0)

使用聚合,您可以使用addToSet()创建第二种形式的数组(如果适用于您)。