1

我的“事件”集合中有与此类似的文档:

{
   eventname: "blah",
   invitees: [
     {
        inviteid: 1,
        userid: 34234
     },
     {
        inviteid: 2,
        userid: 5232
     }]
}

如果我想要 user: "34234" 被邀请参加的所有事件,那么在每个事件文档中搜索每个invitees数组是否有效?似乎杀过头了。我知道这对于关系数据库来说会很棒,但是这可以在 mongodb 中做得很好吗?

更新:

我最终使用了这个,它有效,但仍然不知道这是否是一个很好的方法: _Events.Collection.FindAll().Where(x => x.Invitees.Any(y => y.UserId == userId)).ToList();

4

3 回答 3

1

相反,这样的查询很适合 MongoDB。它允许您应用 MultiKey 索引:数据类型为数组的字段的索引。

db.events.ensureIndex( { "invitees.userid" : 1 })

这样,您不必在每个文档中搜索每个数组

于 2013-03-13T22:55:41.697 回答
0

我不确定 mongodb,但您可以使用 Linq 轻松执行搜索:

var results = 
    from evt in events
    where evt.invitees.Any(x => x.userid == 34234)
    select evt;

如果事件的数量相对较少,这将非常快。

于 2013-03-13T21:52:48.280 回答
0

我不认为这有什么问题,这是文档数据库的好处之一。如果有的话,你应该有一个索引。请参阅索引的 mongodb 文档

于 2013-03-13T21:53:28.670 回答