MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

$penggunaan literal di Golang-mgo

Untuk melengkapi, inilah yang sebenarnya Anda coba lakukan:

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

Masalahnya bukan pada "Point" Anda literal, itu hanya kebetulan belaka. Jika Anda mengubahnya menjadi "Pt" misalnya, Anda masih akan melihat pesan kesalahan yang sama persis.

Point dalam pesan kesalahan merujuk ke $centerSphere , yang mengharapkan titik center pusat dan radius. Dan cara Anda mencoba "lulus" tidak berhasil.

Ini berfungsi misalnya:

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

Permintaan awal Anda tidak masuk akal, karena Anda mencoba mencari dokumen yang lokasinya berjarak 10 kilometer dari itu sendiri , yang akan cocok dengan semua dokumen.

Alih-alih, Anda ingin / harus menanyakan dokumen yang berada dalam jarak 10 kilometer dari spesifik lokasi, dan Anda dapat meneruskan koordinat lokasi spesifik ini ke $centerSphere :

myLong, myLat := 10.0, 20.0

// ...

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

Kueri lengkapnya:

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. Antarmuka mongo

  2. Operasi massal MongoDb dapatkan id

  3. MongoDB $gantiSemua

  4. 7 Cara untuk Memeriksa Versi MongoDB Anda

  5. ATAU pencocokan kueri nihil atau dengan Mongoid masih cocok?