索引在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将不会使用索引。