在文档中搜索文档是不好的做法

本文关键字:文档 搜索 | 更新日期: 2023-09-27 18:03:51

我的"events"集合中有一些文档是这样构建的:

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

在文档中搜索文档是不好的做法

相反,这样的查询将非常适合MongoDB。它允许你应用一个MultiKey索引:一个数据类型为数组的字段的索引。

db.events.ensureIndex( { "invitees.userid" : 1 })
这样,您就不必在每个文档中搜索每个数组

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

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

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

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