2017-05-17 7 views
0

私のユーザコレクションでは、私は連絡先の配列を含むオブジェクトを持っています。 オブジェクト定義は以下のとおりです。 このオブジェクト全体を、連絡先の完全な配列とともに、サーバからMeteorのユーザデータベースに、理想的には単一のコマンドで書き込むことはできますか? 私はmongoドキュメントと流星ドキュメントを読むのにかなりの時間を費やしましたが、これを動作させることはできません。 私はまた、オブジェクト全体を使用して、これを達成しようとするためにコンポーネント部分を反復することで、多数の異なるコマンドとアプローチを試みましたが、失敗しました。ここでは全体の接点が$セットを使用してオブジェクトの書き込みを試みる(失敗した)の例である:オブジェクトの配列を含むオブジェクトをMeteorのmongoデータベースに書き込み

Meteor.users.update({ _id: this.userId }, {$set: { 'Contacts': contacts}}); 

ありがとうございました。

オブジェクト定義(これはユーザーコレクション内のフィールドである):

"Contacts" : { 
    "contactInfo" : [ 
     { 
      "phoneMobile" : "1234567890", 
      "lastName" : "Johnny" 
      "firstName" : "Appleseed" 
     } 
    ] 
} 

答えて

1

このアップデートは絶対に動作するはずです。私が考えているのは、Meteorが現在のユーザー文書のすべてのキーを自動的に公開しないため、Contactsのデータをクライアントに公開していないということです。つまり、あなたのアップデートはうまく動いていて、データをmongoに保存していますが、クライアントには表示されません。これは、コマンドラインでmeteor mongoを実行し、問題のユーザー文書を検査することで確認できます。

試してみてください。

サーバー:

Meteor.publish('me',function(){ 
    if (this.userId) return Meteor.users.find(this.userId, { fields: { profile: 1, Contacts: 1 }}); 
    this.ready(); 
}); 

クライアント:

Meteor.subscribe('me'); 
+0

ありがとうございました。データを書き込むために投稿したコードは機能しません。結果を正しく表示していないだけではありません。なぜそれが動作しないのか分かりません。私は、データベースツール(例えば、MongoChef)を使用してデータベースの内容を直接チェックすることでこれを検証してきました。また、更新が行われていないことをさらに検証する作業用の出版物があります。私が(別の種類の)アップデートを取得すると、クライアント側はその変更を正しく示します。また、これをテストするためにmeteor mongoで読み書きに使用するコマンドをLMKできますか?もう一度おねがいします... – user2330237

+0

mongoでは、 'db.user.find( 'yourIdHere')'を試してください。コンソール出力にそのオブジェクトがあるはずです。何があるかを確認するために、更新の前にあなたのコードに 'console.log(contact)'も入れてください。 –

+0

ご協力ありがとうございます。問題はシンプルなスキーマ検証...フィールド名のタイプミスであることが判明しました。 – user2330237

-1

上記のコマンドは正しいです。問題はスキーマ検証です。シンプルなスキーマは、バックグラウンドで実行中にデータベースに書き込む機能を無効にしていました。エラーは発生せず、予期される結果が得られません。

関連する問題