【发布时间】:2012-08-23 09:00:10
【问题描述】:
我目前正在使用带有 node.js 和 Mongoose 的 MongoDB 来执行地理空间搜索。
我正在处理以下文档和集合:
- waypoints 是包含位置和其他元数据的文档(只是存在,与此问题无关)
-
targets 集合包含
1...nwaypoints -
sources 集合正好包含
1waypoint
这些文档的简单示例:
// Target
{
waypoints: [
{
loc: [61.24, 22.24],
time: 0
},
{
loc: [61.25, 22.24],
time: 1
},
{
loc: [61.26, 22.24],
time: 2
},
]
}
// Source
{
waypoint: {
loc: [61.24, 22.24],
time: 0
}
}
所以我的问题是这样的:
鉴于我们有一个特定的target 文档(如上面的那个),在@ 987654327@?
匹配单个航路点很简单:
Source.find({
'from.loc': {
$within: {
$center: [target.waypoints[0].loc, MAX_DISTANCE],
$uniqueDocs: true
}
}
})
但是,我正在努力寻找如何匹配任何给定航点的解决方案。例如以下查询不起作用:
Source.find({
$or: [
{
'waypoint.loc': {
$within: {
$center: [target.waypoints[0].loc, MAX_DISTANCE],
$uniqueDocs: true
}
}
},
{
'waypoint.loc': {
$within: {
$center: [target.waypoints[1].loc, MAX_DISTANCE],
$uniqueDocs: true
}
}
},
{
'waypoint.loc': {
$within: {
$center: [target.waypoints[2].loc, MAX_DISTANCE],
$uniqueDocs: true
}
}
}
]
})
任何想法为什么这不起作用以及有什么替代方法?
非常感谢所有帮助!
附:我正在使用 MongoDB v2.0.5、Mongoose 2.7.4 和节点 v0.8.7
【问题讨论】:
-
$any 不是顶级查询运算符。你正在寻找$或
-
谢谢! $or 也不起作用 - 我将编辑问题以反映这一点。
-
如果您发布示例数据和您正在尝试的 shell 兼容查询,我会尝试为您修复它。您的架构与您的查询不符(源中的“from”!=“waypoints”)
-
当然,我会尝试这样做。请稍等!
-
这也可能是相关的:jira.mongodb.org/browse/SERVER-3984
标签: node.js mongodb mongoose geospatial