2016-11-14 8 views
0

私はAPI呼び出しを行うMeteorメソッドを持っており、呼び出しの応答はユーザーコレクションに保存されます。私は私のプロジェクトでCollection2パッケージを使用しています。私はこのために私のSimpleSchemaを設定することを少し失っています。API呼び出しの結果をコレクションに保存するが、SimpleSchemaの設定中にエラーを受け取る

[{ "キーワード": "2I"、 "URLを": "http://example.com"、 "タイトル" ここ

はJSONレスポンスは、API呼び出しから次のようになります: "例"、 "タイムスタンプ": "2016-11-05 08:54:42"、 "ip": "00.00.00.000"、 "clicks": "2"、 "user": "HweoSCY2ujscjJ9Zl"}、 {"キーワード": "2j"、 "url": "http://example.com"、 "title": "YouTube"、 "timestamp": "2016-11-06 02:11:18"、 " 「キーワード」:「2k」、「url」:「http://example.com」、「http://www.example.com」、「ip」:「00.00.00.000」、「clicks」:「1」、「user」:「HweoSCY2ujscjJ9Zl」} 「タイトル」:「YouTube」、「タイムスタンプ」:「2016-11-08 03:35:12」、「IP」:「00.00.00.000」、「クリック数」:「0」、「user」:「HweoSCY2ujscjJ9Zl」 }]

ここで私は、ユーザーのコレクションにこのデータを保存することができましたか、現在です:

Meteor.users.update(Meteor.userId(), { 
    $set: { 'shortURLs.URLS': result.data } 
}); 

これは動作し、DBに次のようになります。

screenshot

私の問題があります"タイムスタンプ"が文字列の代わりに日付として保存されるようにSimpleSchemaの設定をしたいと思っていますが、そのたびにスキーマを作成して作成するたびに、私はちょうど"After filtering out keys not in the schema, your modifier is now empty"のようなエラーを受け取ります。私が試してみて、それを動作させるためにさまざまなバリエーションの多くを試してみましたが、それらのどれも成功していない、それはATのところ、ここだけで、現在です:

Schema.ShortURLs = new SimpleSchema({ 
    shortURLs: { 
     type: Object 
    }, 
    'shortURLs.$': { 
     type: Object 
    }, 
    'shortURLs.$.keyword': { 
     type: String, 
     optional: true, 
     label: "Keyword" 
    }, 
    'shortURLs.$.url': { 
     type: String, 
     optional: true, 
     label: "URL" 
    }, 
    'shortURLs.$.title': { 
     type: String, 
     optional: true, 
     label: "Title" 
    }, 
    'shortURLs.$.timestamp': { 
     type: Date, 
     optional: true, 
     label: "Timestamp" 
    }, 
    'shortURLs.$.ip': { 
     type: String, 
     optional: true, 
     label: "IP" 
    }, 
    'shortURLs.$.clicks': { 
     type: String, 
     optional: true, 
     label: "Clicks" 
    }, 
    'shortURLs.$.user': { 
     type: String, 
     optional: true, 
     label: "User" 
    }, 
}); 

これは、[ユーザー簡単なスキーマを離れて取り付けられています。

... 
shortURLs: { 
    type: Schema.ShortURLs, 
    optional: true 
}, 
... 

そして私は、ユーザーのコレクションに取り付けたことがあります。

Meteor.users.attachSchema(Schema.User); 

私は他のSimpleSchemasセットアップと同じ方法と目を持っているとして、私はそれを添付しているかとの問題はないと思いますアイはうまく働いている、私は問題が私がどのようにこの特定のものが書かれていると信じています。ここの助けは非常に高く評価されます。

答えて

1

あなたが私はそれがこれで作業を取得するために管理し、

Schema = {} 
Schema.ShortURLs = new SimpleSchema({ 
    keyword: { 
     type: String, 
     optional: true, 
     label: "Keyword" 
    }, 
    url: { 
     type: String, 
     optional: true, 
     label: "URL" 
    }, 
    title: { 
     type: String, 
     optional: true, 
     label: "Title" 
    }, 
    timestamp: { 
     type: Date, 
     optional: true, 
     label: "Timestamp" 
    }, 
    ip: { 
     type: String, 
     optional: true, 
     label: "IP" 
    }, 
    clicks: { 
     type: String, 
     optional: true, 
     label: "Clicks" 
    }, 
    user: { 
     type: String, 
     optional: true, 
     label: "User" 
    }, 
}); 

Schema.User = new SimpleSchema({ 
... 
    shortURLs: { 
     type: [Schema.ShortURLs], 
     optional: true 
    }, 
... 
}); 

... 

Meteor.users.attachSchema(Schema.User); 
+0

Schema.ShortURLs返信いただき、誠にありがとうございすなわちタイプのリスト、type: [Schema.ShortURLs]としてMeteor.usersコレクションにshortURLsタイプを定義する必要があります。私はちょうど1つの質問を持っています。私はこのメソッドを呼び出すたびに、各配列のコンソールに次のようなメッセージが表示されるのを見ています: '' SimpleSchema.clean:autoconvertedの値2016-11-11 23:44:28 shortURLsの文字列からオブジェクトへ$。タイムスタンプ "。これについてもっと良い方法を知っていますか?いくつかのケースでは、APIの結果が100+を返すため、このポップアップが何度も表示されるので、私はおそらく何か正しい/最も効率的にやっているとは思わないかもしれませんが、おそらく私は間違っています。すべての入力は非常に感謝、再びありがとう! :) – U54

+0

これは正常です.APIから返された日付値の生の型は文字列です。 'SimpleSchema.debug = false'を設定することでこれを止めることができますが、SimpleSchemaパッケージの他の警告も見逃すことがあります。 – JeremyK

関連する問題