索引在mongoose文件

我是一个searchfunction的工作,我必须在文档中的多个字段进行search。

我有以下情况:

1)获取field1,field2,field3,field4与string(nayyar)匹配的所有文档

2)获取field1,field2,field3,field4与string(nayyar)匹配的所有文档,性别应该是(input值)或“N / A”。

3)获取field1,field2,field3,field4与string(nayyar)匹配的所有文档,age应该在ageHigh和ageLow之间,AND性别应该是(input值)或'N / A'。

4)获取field1,field2,field3,field4与string(nayyar)匹配的所有文档,并且age应该在ageHigh和ageLow之间,AND性别应该是(input值)或'N / A'AND ArrayField'atoz'。

var Schema = new Schema({ lowAge : { type: Number, default: 0 }, highAge : { type: Number, default: 0 }, gender : { type: String, default: 'N/A' }, field1 : { type: String }, field2 : { type: String }, field3 : { type: String }, field4 : { type: String }, arrayField : { type: [String] } }); Schema.index({field1:1, field2:1, field3:1, field4:1}); Schema.index({field1:1, field2:1, field3:1, field4:1, arrayField:1,lowAge:1, highAge:1, gender:1,}); 

这是索引的正确方法吗?

首先,在字段上创build索引的想法似乎是正确的。 但是,在查询中使用的所有可能字段上创build索引看起来不正确。

在post中列出的所有查询都包含四个字段。 如果你在所有这4个字段上创build一个复合索引,我认为它应该是足够的。

另外,您正在模式级别定义索引。 当应用程序启动时,Mongoose将自动为您的模式中定义的每个索引调用ensureIndex。 这可能会导致一些性能影响。

你需要考虑以下几点:

1)单场索引即在每个场上创build四个索引。

例:

 db.collection.createIndex({field1 : 1}); 

如果您需要通过field1,field2,field3或field4或一个或多个字段的组合来查找文档,请转到此选项。

在这个选项中,索引是独立的。 MongoDB将始终使用索引(即索引之一)。

2)复合索引即创build四个字段的索引

例:

 db.collection.createIndex({field1 : 1, field2 : 1, field3 : 1, field4 :1}); 

去这个选项,如果你总是有field1。

如果在任何情况下都没有field1,MongoDB将不会使用索引。