sql >> Database teknologi >  >> NoSQL >> MongoDB

$literal brug i Golang-mgo

For at være komplet, er dette, hvad du faktisk prøver at gøre:

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

Problemet er ikke med din "Point" bogstaveligt talt, det er blot en tilfældighed. Hvis du ændrer det til "Pt" for eksempel vil du stadig se nøjagtig samme fejlmeddelelse.

Punkt i fejlmeddelelsen henviser til $centerSphere , som forventer et center punkt og en radius. Og den måde du forsøger at "bestå" på virker ikke.

Dette virker for eksempel:

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

Din oprindelige forespørgsel giver ikke mening, da du forsøger at finde dokumenter, hvor placeringen er inden for 10 kilometer fra sig selv , som ville matche alle dokumenter.

I stedet vil du/bør forespørge dokumenter, der er inden for 10 kilometer fra en specifik placering, og du kan videregive koordinaterne for denne specifikke placering til $centerSphere :

myLong, myLat := 10.0, 20.0

// ...

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

Den komplette forespørgsel:

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. Hvordan fungerer MongoDB $text-søgning?

  2. MongoDB - lukker ned med kode:62

  3. Filtrering af indlejrede dokumenter i MongoDB

  4. Mongoose:Fjern objekt fra array baseret på ID (Cast Error)