2Dジオインデックスを使用してMongooseスキーマの配列内のオブジェクトを正しく定義する方法 質問する

2Dジオインデックスを使用してMongooseスキーマの配列内のオブジェクトを正しく定義する方法 質問する

現在、以下のドキュメントのスキーマを作成する際に問題が発生しています。サーバーからの応答では、常に「trk」フィールドの値が [Object] として返されます。少なくとも、私にとって意味のあるすべてのアプローチを試したのですが、これがどのように機能するのかまったくわかりません ;-)

これが役に立つなら、私のMongooseバージョンは3.6.20、MongoDBは2.4.7です。忘れる前に、Index(2d)として設定するのもいいでしょう。

元データ:

{
    "_id": ObjectId("51ec4ac3eb7f7c701b000000"),
    "gpx": {
        "metadata": {
            "desc": "Nürburgring VLN-Variante",
            "country": "de",
            "isActive": true
        },
    "trk": [
    {
        "lat": 50.3299594,
        "lng": 6.9393006
    },
    {
        "lat": 50.3295046,
        "lng": 6.9390688
    },
    {
        "lat": 50.3293714,
        "lng": 6.9389939
    },
    {
        "lat": 50.3293284,
        "lng": 6.9389634
    }]
    }
}

マングーススキーマ:

var TrackSchema = Schema({
            _id: Schema.ObjectId,
            gpx: {
                metadata: {
                    desc: String,
                    country: String,
                    isActive: Boolean
                },
                trk: [{lat:Number, lng:Number}]
            }
        }, { collection: "tracks" });

Chrome の [ネットワーク] タブからの応答は常に次のようになります (間違っているのは trk 部分のみです)。

{ trk: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],

私はすでに「trk」に対してさまざまなスキーマ定義を試しました:

  1. trk: スキーマ.タイプ.混合
  2. trk: [スキーマ.タイプ.混合]
  3. trk:[ { タイプ:[数値], インデックス: "2d" }]

助けていただければ幸いです ;-)

ベストアンサー1

trkは以下の方法で宣言できます: - どちらか

trk : [{
    lat : String,
    lng : String
     }]

または

trk : { type : Array , "default" : [] }

2番目のケースでは、挿入時にオブジェクトを作成し、次のように配列にプッシュします。

db.update({'Searching criteria goes here'},
{
 $push : {
    trk :  {
             "lat": 50.3293714,
             "lng": 6.9389939
           } //inserted data is the object to be inserted 
  }
});

または、オブジェクトの配列を設定することもできます。

db.update ({'seraching criteria goes here ' },
{
 $set : {
          trk : [ {
                     "lat": 50.3293714,
                     "lng": 6.9389939
                  },
                  {
                     "lat": 50.3293284,
                     "lng": 6.9389634
                  }
               ]//'inserted Array containing the list of object'
      }
});

おすすめ記事