sql >> データベース >  >> NoSQL >> MongoDB

Golang-mgoでの$literalの使用

    完全を期すために、これはあなたが実際にやろうとしていることです:

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

    問題は"Point"ではありません 文字通り、それは単なる偶然です。 "Pt"に変更した場合 たとえば、まったく同じエラーメッセージが表示されます。

    ポイント エラーメッセージでは、 $centerSphere<を参照しています。 / code> 、中心ポイントを期待します と半径。そして、それを「通過」させようとする方法は機能しません。

    これは次のように機能します:

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

    場所がそれ自体から10km以内にあるドキュメントを検索しようとするため、元のクエリは意味がありません。 、これはすべてのドキュメントに一致します。

    代わりに、特定のから10km以内にあるドキュメントをクエリする必要があります。 場所。この特定の場所の座標を$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. MongoDB ::Mongo IDはコレクション全体で一意ですか?

    2. Pymongoを使用してMongoDBで単一のフィールドを選択するにはどうすればよいですか?

    3. MongoDBでの結果を制限しますが、それでも完全なカウントを取得しますか?

    4. MongoDbセーヴィングは、PHPクラスのプライベートメンバーに対してエラーをスローします