sql >> Database >  >> NoSQL >> MongoDB

$letterlijk gebruik in Golang-mgo

Om volledig te zijn, dit is wat je eigenlijk probeert te doen:

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}}}}},
})

Het probleem ligt niet bij uw "Point" letterlijk, het is gewoon toeval. Als je het verandert in "Pt" u ziet bijvoorbeeld nog steeds exact dezelfde foutmelding.

Het Point in de foutmelding verwijst naar $centerSphere , die een middelpunt verwacht en een straal. En de manier waarop je het probeert te "passen", werkt niet.

Dit werkt bijvoorbeeld:

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

Uw oorspronkelijke zoekopdracht heeft geen zin, aangezien u documenten probeert te vinden waarvan de locatie zich binnen 10 kilometer van zelf bevindt , die overeenkomen met alle documenten.

In plaats daarvan wilt/moet u documenten opvragen die zich binnen 10 kilometer van een specifiek . bevinden locatie, en u mag de coördinaten van deze specifieke locatie doorgeven aan $centerSphere :

myLong, myLat := 10.0, 20.0

// ...

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

De volledige vraag:

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. Converteer ObjectID naar String in mongo-aggregatie

  2. Express laadsessie van Mongo met session_id

  3. Op tijd gebaseerde sorteer- en limietproblemen koppelen

  4. Integraties en services beschikbaar van MongoDB voor de cloud