0

我有收藏宠物,我在其中存储具有该收藏位置的动物我有索引

{
    "Cache.Location" : "2dsphere"
}

因此,当我运行查询时,我希望在最大距离 100 公里内获得靠近我的城市利沃夫的元素

db.Pet.find({ "Cache.Location" : { "$nearSphere" : { "$geometry" : { "type" : "Point", "coordinates" : [24.029717000000005, 49.839683] } }, "$maxDistance" : 100000.0 } })

但它会返回奇怪的结果,比如来自俄罗斯和以色列的宠物。

但是我的位置有很多宠物,应该归还

{
    "_id" : 336,
    "PetTypeId" : 1,
    "UserId" : 373,
    "PetBreedId" : 127,
    "Adverts" : [],
    "Name" : "Каспер",
    "Birthdate" : ISODate("2009-04-06T21:00:00.000Z"),
    "CreatedAt" : ISODate("2011-07-27T18:32:25.000Z"),
    "MainImageFileId" : 1361,
    "Description" : "",
    "Sex" : 1,
    "Cache" : {
        "MainImage" : "http://img.thebestofpets.com/%size%/1/1361.jpg",
        "Location" : {

            "lat" : 49.83968353271484, "lng" : 24.02971649169922
        }
    }
}

那么我做错了什么?

4

1 回答 1

0

花了 4 个多小时后,我上床睡觉,就在早上,我发现出了什么问题。

如果你注意位置,你会看到

"Location" : {

            "lat" : 49.83968353271484, "lng" : 24.02971649169922
        }

Latitude 排在第一位,但在 mongodb 文档中到处都说它应该是第二个字段。

所以我只是修复我的实体看起来像

使用 MongoDB.Bson.Serialization.Attributes;

namespace Pets.Domain.Entity
{
    public class Location
    {
        public Location()
        {

        }
        public Location(double lat, double lon)
        {
            Latitude = lat;
            Langtitude = lon;
        }
        [BsonElement("lat", Order = 2)]
        public double Latitude { get; set; }
        [BsonElement("lng", Order = 1)]
        public double Langtitude { get; set; }
    }
}

现在它按预期工作

PS。蒙哥太酷了:)

于 2013-09-29T10:57:36.733 回答