gpt4 book ai didi

Mongodb查找比较数组元素

转载 作者:行者123 更新时间:2023-12-02 13:11:30 25 4
gpt4 key购买 nike

我有一个包含大约 20 万个文档的集合,如下所示:

db.place.find()[0]
{
"_id" : ObjectId("5290de1111afb260363aa4a1"),
"name" : "place X",
"center" : [x, y]
}

现在我正在尝试查询中心Y大于X的地方,并遇到以下问题:

> db.place.find({'center.0':{'$gt':center.1}}).count()
Sat Nov 23 14:42:01.556 JavaScript execution failed: SyntaxError: Unexpected number

有什么提示吗?提前致谢

最佳答案

因为您每次都恰好有字段的精确格式(圆圈是一个二元素数组),所以您可以在聚合框架中将其转换为两个字段,然后在投影中比较它们,并匹配以仅返回满足的元素您要求第二个数组元素大于第一个数组元素。

db.place.aggregate( [
{ $unwind : "$center" },
{ $group : { _id : "$_id",
centerX : {$first:"$center"},
centerY : {$last:"$center"}
} },
{ $project : { YgtX : { $gt : [ "$centerY", "$centerX" ] } } },
{ $match : { YgtX : true } }
] );

现在,如果您的数组是任意一对数值,那么您可以使用上面的。

您在评论中说您的坐标对代表坐标(纬度,经度) - 请记住,在 MongoDB 中坐标对始终是 stored as long, lat - 如果您的实际 x、y 值是平面(而不是球形)位置上的坐标,您可以使用单个地理空间查询找到 Y 坐标大于 X 坐标的所有文档:

db.place.find( { center : { $geoWithin : { $geometry : {
type:"Polygon",
coordinates:[[[50,50],[-50,50],[-50,-50],[50,50]]]
} } } } );

上面的查询假设您的坐标系沿着 X 和 Y 从 -50 到 50,并且它会找到三角形中代表 Y >= X 的所有坐标的所有点。

关于Mongodb查找比较数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20165272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com