我有很多不同的文件,每个文件都包含一个" savetime"场和一点。是否有可能不仅查询包含位置$接近某个点的所有文档,还可以查询同一时间内(或彼此在1秒内)?执行查询以确保最佳性能的最佳方法是什么?
答案 0 :(得分:2)
compound 2dsphere索引可以引用集合文档中的多个位置和非位置字段。您可以按任何顺序排列字段。
因此,为了让您按时间执行约束的查询,您将创建一个{&n; 34保存时间"的compound索引。因为它是第一个元素。即:
db.collection.ensureIndex({ savetime: 1, loc: "2dsphere" })
这允许您正常约束日期,同时添加附加约束以便在该点附近找到:
db.collection.find({
savetime: { $gte: new Date(<start>), $lte: new Date(<end>) },
loc: { $near :
{ $geometry :
{ type : "Point" ,
coordinates : [ <longitude> , <latitude> ] } ,
$maxDistance : <distance in meters>
}
}
}
})