1. ホーム
  2. node.js

[解決済み] Mongoose スキーマで 2 次元ジオインデックスを使用して配列にオブジェクトを正しく定義する方法

2022-05-10 17:12:49

質問

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

もしこれが役に立つなら、私のMongooseのバージョンは3.6.20で、MongoDBは2.4.7です。 そして、忘れないうちに、インデックス (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
    }]
    }
}

Mongoose Schemaです。

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" の異なる Schema 定義を試しました。

  1. trk: Schema.Types.Mixed
  2. trk: [Schema.Types.Mixed](スキーマタイプ、混合)。
  3. trk:[ { type:[Number], index: "2d" }] のようになります。

助けていただけると幸いです。)

どのように解決するのですか?

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

でオブジェクトのArrayを設定することもできます。

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'
      }
});