2017-03-16 114 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