Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于数组的Mongodb空间查询_Mongodb_Mongodb Query - Fatal编程技术网

基于数组的Mongodb空间查询

基于数组的Mongodb空间查询,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个点及其属性的集合,我跟踪它们随时间移动的位置,因此文档如下所示: { _id: 1, mass: 2, track: [ { time: 0, loc: [0, 0] }, { time: 1, loc: [0.2, 0.1] }, ... ] } 所以位置不是一个字段,而是一个数

我有一个点及其属性的集合,我跟踪它们随时间移动的位置,因此文档如下所示:

{
    _id: 1,
    mass: 2,
    track: [
        {
            time: 0,
            loc: [0, 0]
        },
        {
            time: 1,
            loc: [0.2, 0.1]
        },
        ...
    ]
}
所以位置不是一个字段,而是一个数组…

我可以使用mongodb的地理空间功能来查找在某个特定点附近移动的所有点吗?我可以为这个查询添加时间吗:
t1

是的-这正是mongodb可以做得很好的地方

首先,您需要创建一个地理空间索引——让Mongodb预先计算东西的位置

db.mycollection.ensureIndex({'track.loc':'2D'})
更多信息请点击此处:

然后,找到某个地方附近的某个地方:

db.mycollection.findOne({'track.loc':{'$near':[x,y]}})
还有在边界区域内执行此操作的选项等

如果要结合时间过滤器执行此操作:

db.mycollection.findOne({'track.loc':{'$near':[x,y]}, 'track.time':{$gt:10}})
这将找到距离时间大于10的x,y最近的点


希望你没有侵犯任何人的隐私

是的,在MongoDB中使用地理空间索引时,有一种特殊情况,称为多位置文档:

用于二维索引的多位置文档

版本2.0中的新增功能:支持文档中的多个位置

而二维地理空间索引不支持多组索引 在文档的坐标中,可以使用多键索引进行索引 单个文档中有多个坐标对

对于多位置,支持多种不同的模式-您的数据模型似乎映射良好。您应该能够使用以下“确保索引”命令:

db.collectionname.ensureIndex( { "track.loc": "2d" } )
但是,关于您的查询,不确定您是否可以使用此模式在MongoDB中进行查询。问题在于,您实际上是在尝试相互比较数组条目(比较时间字段以在同一数组中找到一个大于另一个的时间字段)。您可以尝试使用聚合框架,但在使用地理空间坐标时存在明显的限制:


现在在我看来,这就像一些自定义编码。我将仔细研究是否最好将每个时间/位置对存储为单独的文档。例如,您可以获取一个点的第一个时间/位置,计算距离,然后查询该点是否有距离小于您刚才计算的距离的时间/位置对。

这不会只返回
loc
数组中靠近点(x,y)的元素,而是返回整个文档。您知道有什么方法可以只返回数组中的close-by元素吗?