在MongoDB中search(从NodeJS)

我有一个MongoDB数据库,每天有5到10个插入。 将被插入的数据的结构如下所示:

{ question: 'text here', date: '01/01/2000 01:01', title: 'Some title', client: 'name', assigned_to: ['name1', 'name2', 'name3'], answers: [ {answer: 'bla bla'}, {answer: 'bla bla'}, {answer: 'bla bla'} ] } 

我需要在所有文本字段(问题,标题和所有答案)中search单词或一系列单词。 我一直在寻找,这是我迄今为止发现的。 有3个解决scheme:

 a) $regexp b) Enable full-text search in MongoDB and use it c) Save the structure with the following format (and then use multi-key search) { question: 'text here', question_s: ['text', 'here'], date: '01/01/2000 01:01', title: 'Some title', title_s: ['Some', 'title'], client: 'name', assigned_to: ['name1', 'name2', 'name3'], answers: [ {answer: 'bla bla', answer_s: ['bla', 'bla']}, {answer: 'bla bla', answer_s: ['bla', 'bla']}, {answer: 'bla bla', answer_s: ['bla', 'bla']} ] } 

了解我的数据的确切格式,以及它的规模有多大(估计在接下来的10年),那么在速度和可用性方面哪个更好? (也考虑到这些解决scheme所需的时间/脑部疼痛,如设置,configuration等)

其次,速度要好得多,特别是在索引方面。 首先是可用性更好,因为只需使用简单的RegExp即可。

另一个select是将所有单词的另一个集合,然后添加到它的单词为_id,并有_id的项目(在你的情况下的问题)的数组。 这样就不需要存储空间了,外部收集工作负责search。 将使每个单词search更容易,以及将使这个RegExpsearch: ^someText ,这是string的开始 – 也将使用索引。

这里的负面部分是,你需要适当的系统,以确保文字收集更新,并与实际项目(在你的情况下的问题)一致。 但一旦完成,这将是快速和易于使用,以及将能够返回多个search结果具有良好的性能,无论收集与文字大小,因为它会使用索引。

另一个问题可能会开始,如果单词收集索引数据太大,不适合RAM,那么它会将这个索引数据移动到文件中 – 这通常会减慢写入和读取。
但为此,您需要数百万甚至更多的logging,然后您可以考虑数据库集群中的单词集合拆分,例如第一个字母。