Mongodb查询优化where子句

时间:2017-03-16 06:21:42

标签: mongodb-query query-optimization

我正在使用MongoDB版本3.2.8。我正在执行db.Member.find({$where: "var d = new Date(this.Birthdate); return d.getUTCDate() === 4 && d.getUTCMonth() === 2 && d.getUTCFullYear() !== 2017" })在我的本地mongo上执行此查询需要花费太多时间。此查询是否有任何替代方法,以便查询可以优化?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用MongoDB Aggregation Framework。我使用Mingo库测试了Javascript

实施例:

var mingo = require('mingo')

var data = [{
  _id: 100,
  Birthdate: new Date("1995-02-04")
}]

var pipeline = [
    {
        $project: { M: { $month: "$Birthdate"}, Y: { $year: "$Birthdate"}, D: { $dayOfMonth: "$Birthdate"}, Birthdate: 1 }
    },
    {
        $match: { $and: [ { D: 4 }, { M: 2 }, {Y: { $ne: 2017 } } ] }
    },
    {
        $project: { M: 0, D: 0, Y: 0 }
    }
]

var result = mingo.aggregate(data, pipeline)

console.log(result)

// Output
// [ { Birthdate: 1995-02-04T00:00:00.000Z, _id: 100 } ]

对于MongoDB:

db.Member.aggregate(pipeline)