MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

използване на $literal в Golang-mgo

За да бъдем пълни, ето какво всъщност се опитвате да направите:

pipe := DB.C("store").Pipe([]bson.M{
    {"$project": bson.M{"location": bson.M{"type": bson.M{"$literal": "Point"}, "coordinates": []interface{}{"$longitude", "$latitude"}}}},
    {"$match": bson.M{"location": bson.M{"$geoWithin": bson.M{"$centerSphere": []interface{}{"$coordinates", 10 / 6378.11}}}}},
})

Проблемът не е във вашата „Точка“ буквално, това е просто съвпадение. Ако го промените на "Pt" например пак ще виждате абсолютно същото съобщение за грешка.

Точката в съобщението за грешка се отнася до $centerSphere , което очаква централна точка и радиус. И начинът, по който се опитвате да го "прекарате", не работи.

Това работи например:

"$centerSphere": []interface{}{[]interface{}{1.0, 2.0}, 10 / 6378.11}

Първоначалната ви заявка няма смисъл, тъй като се опитвате да намерите документи, където местоположението е в рамките на 10 километра от самото , което ще съответства на всички документи.

Вместо това искате/трябва да търсите документи, които са в рамките на 10 километра от конкретно местоположение и можете да предадете координатите на това конкретно местоположение на $centerSphere :

myLong, myLat := 10.0, 20.0

// ...

"$centerSphere": []interface{}{[]interface{}{myLong, myLat}, 10 / 6378.11}

Пълната заявка:

myLong, myLat := 10.0, 20.0
pipe := DB.C("store").Pipe([]bson.M{
    {"$project": bson.M{"location": bson.M{"type": bson.M{"$literal": "Point"}, "coordinates": []interface{}{"$longitude", "$latitude"}}}},
    {"$match": bson.M{"location.coordinates": bson.M{"$geoWithin": bson.M{"$centerSphere": []interface{}{[]interface{}{myLong, myLat}, 10 / 6378.11}}}}},
})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb:Как да вмъкна допълнителен обект в колекция от обекти?

  2. Условно размотаване в агрегацията на MongoDb?

  3. MongoDb SafeMode в сравнение с WriteConcern

  4. MongoDB шардинг, как се ребалансира при добавяне на нови възли?

  5. Не може да се стартира mongos