$ nearSphere无法按预期工作

时间:2013-09-29 10:57:37

标签: mongodb mongodb-.net-driver

我有收集宠物,我在那里存放有该位置的动物,我有索引

{
    "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
        }
    }
}

所以我做错了什么?

1 个答案:

答案 0 :(得分: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。 Mongo太酷了:))