0

コレクション ペットを持っており、そのコレクションの場所に動物を保管しています。インデックスがあります。

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

したがって、クエリを実行すると、最大距離 100 KM で私の都市 lviv の近くにある要素を取得することが期待されます

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 のドキュメントのどこでも、2 番目のフィールドにする必要があると記載されています。

だから私は自分のエンティティを次のように修正するだけです

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 に答える