搜索文档里面的文档不好的做法?

时间:2013-03-13 21:48:20

标签: c# mongodb database

我的“events”集合中的文档与此类似:

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

如果我想要邀请用户:“34234”的所有事件,那么搜索每个事件文档中的每个invitees数组是否有效?好像过度杀人。我知道这对于关系数据库来说会很棒,但是这可以在mongodb中很好地完成吗?

更新:

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

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

我认为它没有任何问题,这是文档数据库的好处之一。如果有的话,你应该有一个索引。请参阅mongodb documentation on indexes