2017-03-16 67 views
0

我正在使用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上执行此查询所花费的时间太多。这个查询有没有其他的选择,所以查询可以优化?Mongodb查询优化where条款

回答

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) 
+0

感谢您的解决方案,但我怎么能使用此解决方案来写我的查询? – hitesh007

+0

在你自己的例子中,在'mingo.aggregate(data,)'中使用管道查询。如:'db.Member.aggregate()' – kofrasa

+0

我的出生日期字段格式是这样的:“出生日期”:983664000000.0,我想给$以上条件的地方。所以我怎么可以在汇总管道中使用它 – hitesh007