我的mongodb系列中有大约300列。 这个集合将包含大约1000万条+记录。 任何人都可以建议我应该遵循的任何可能的优化和良好做法。
MongoDB 3.4版 文件结构:
{
"_id" : ObjectId("2343290422555520a09c154"),
"10_second_video_views" : "0",
"30_second_video_views" : "0",
"3_second_video_views" : "0",
"account_id" : "12345679898",
"account_name" : "Test FB ad Account",
"ad_id" : "632234424",
"ad_name" : "Music_Mobile_Men_20-50_101",
"adset_id" : "67453452",
"adset_name" : "CA_Lookalike (US 1%) - Music_Mobile_Men_121715",
"datetime" : ISODate("2017-12-14T19:52:50.000+05:00")
.....
.....
around 300 columns
}
我必须根据日期范围,广告系列,广告和广告执行查询。我必须使用聚合管道执行聚合操作。
我已经创建了一个测试用例,其中在集合中插入了10百万条记录,然后尝试执行各种查询,但遗憾的是它们无法正常运行并继续运行。
我试过的查询:
/*------1-------*/
db.ads_insightsV2.aggregate([
{
$match: {
"ad_id" : "6033051510015"
}
},
{
$group:{
_id: "ad_id",
ids: {$push: "$ad_name"}
}
}
]);
/*------2-------*/
db.ads_insights.aggregate([
{
$project:{
_id: 0,
Year: {$year: "$datetime"},
Month: {$month: "$datetime"},
Day: {$dayOfMonth: "$datetime"},
datetime: 1
}
},
{
$match: {
"Day" : 15
}
},
{
$group: {
_id: "$Day",
count: {$sum: 1}
}
},
{
$sort: {
_id: 1
}
}
]);
/*------3-------*/
db.ads_insights.aggregate([
{
$match: {
"ad_id" : "6033051510015",
"datetime" : {$lte: new Date("2017-12-19T17:30:32.000+05:00")}
}
},
{
$group:{
_id: "ad_id",
ids: {$push: "$ad_name"}
}
}
]);
我还尝试使用
在我的datetime列上创建索引db.ads_insights.createIndex( { datetime: 1 } );