如何在 mongodb 中搜索数组对象中最近的位置

How to search nearest place in array object in mongodb

mongodb 文档 'contents' 是

{
    "_id" : ObjectId("57bd1ff410ea3c38386b9194"),
    "name" : "4Fingers",

    "locations" : [
            {
                    "id" : "locations1",
                    "address" : "68 Orchard Rd, #B1-07 Plaza Singapura, Plaza Singapura, Singapura 238839",
                    "phone" : "+65 6338 0631",
                    "openhours" : "Sunday-Thursday: 11am - 10pm \nFriday/Saturday/Eve of PH*: 11am - 11pm",
                    "loc" : [
                            "1.300626",
                            "103.845061"
                    ]
            }
    ],

    "comments" : [ ],
    "modified" : 1472271793525,
    "created" : 1472012276724,
    "createdby" : "Admin",
    "modifiedby" : "Admin",
    "createdipaddress" : "localhost",
    "modifiedipaddress" : null,
    "types" : "Restaurant",
    "category" : "FoodAndBeverages",
    "logo" : "logo4Fingers.png",
    "tags" : "western, chicken, restaurant, food, beverages"
}

我想从 HTML5 导航中找到离我的位置最近的地方。我如何查询它?数据应按从近到远的顺序排序。

谢谢。

要查询 mongodb 地理空间数据,您首先需要在您的位置字段上建立地理空间索引。

你的位置字段是字符串,需要是数值类型,你需要相应地更新你的数据。

根据数字位置数据创建索引:

db.collection.createIndex( { "locations.loc" : "2d" });

查询:

var projection = {"locations.loc":1};

var query = {"locations.loc": {"$near":[1.300626, 103.845061], "$maxDistance": 0.5}};
db.collection.find(query, projection).pretty();
//result:
{
    "_id" : ObjectId("57bd1ff410ea3c38386b9194"),
    "locations" : [
        {

        "loc" : [
            1.300626,
            103.845061
        ]
    }
    ]
}

var query2 = {"locations.loc": {"$near":[2.300626, 103.845061], "$maxDistance": 0.5}};
db.collection.find(query2, projection).pretty();
//result:
{}

查询结果将始终排序,最近的文档排在第一位。

谢谢 Sergiu Zaharie。

有效。

那我怎么才能返回所有字段而不是只返回这个字段呢

{
    "_id" : ObjectId("57bd1ff410ea3c38386b9194"),
    "locations" : [
            {
                    "loc" : [
                            103.845061,
                            1.300626
                    ]
            }
    ]
}

//编辑

已解决。

我只是清除投影然后它就像魅力一样工作。

谢谢。