2016-09-19 4 views
0

私はmeteorとmongoで新しいです。私は別の配列の内容である配列内の1つのオブジェクトをプッシュしたいと思います。私はカンティエリにプジョーニを欲しいです。しかし、私は1つの特定のcantieriでプッシュgiorniしたいと思います。どうすれば作れますか?この私のスキーマのコレクション。オブジェクトを流星1.4で配列に入れますか?

`Clienti.Giorni = new SimpleSchema({ 
    giorno: { 
     type: Date, 
     label: "giorno del lavoro" 
    }, 
    oraPartenza: { 
     type: Date, 
     label: 'Giorno e ora partenza', 
    }, 
    oraInizio: { 
     type: Date, 
     label: 'Giorno e ora inizio', 
     optional: true 
    }, 
    oraFine: { 
     type: Date, 
     label: 'Giorno e ora fine', 
     optional: true 
    }, 
    dipendenti: { 
     type: [Dipendenti] 
    } 
}); 

Clienti.Cantieri = new SimpleSchema({ 
    _id:{ 
     type: String, 
     autoValue: function(){ 
      var id = new Meteor.Collection.ObjectID(); 
      return id._str 
     } 
    }, 
    nome: { 
     type: String 
    }, 
    luogo: { 
     type: String 
    }, 
    inizio: { 
     type: Date 
    }, 
    scadenza: { 
     type: Date 
    }, 
    inCorso: { 
     type: Boolean, 
     defaultValue: false 
    }, 
    createdAt: { 
     type: Date, 
     label: "Creato il", 
     autoValue: function() { 
      return new Date() 
     } 
    }, 
     giorni: { 
     type: [Clienti.Giorni], 
     optional: true, 
     autoform: { 
      type: "hidden" 
     } 
    } 
}); 

Clienti.ClienteSchema = new SimpleSchema({ 
    nome: { 
     type: String, 
     label: "nome" 
    }, 
    iva: { 
     type: String, 
     label: "Partita iva", 
     max: 16 
    }, 
    referente: { 
     type: String, 
     label: "Nome persona di rifermento" 
    }, 
    email: { 
     type: String, 
     label: "email" 
    }, 
    indirizzo:{ 
     type:String, 
     label: 'Indirizzo' 
    }, 
    createdAt: { 
     type: Date, 
     label: "Creato il", 
     autoValue: function() { 
      return new Date() 
     }, 
     autoform: { 
      type: "hidden" 
     } 
    }, 
    cantieri: { 
     type: [Clienti.Cantieri], 
     optional: true, 
     autoform: { 
      type: "hidden" 
     } 
    } 
}); 

Clienti.attachSchema(Clienti.ClienteSchema);` 
+0

[this](http://stackoverflow.com/questions/27874469/mongodb-push-in-nested-array)のような何か? – MasterAM

+0

実際にはこのソリューションを試しています 'aggiungiGiorno:function(id、idC、doc){ \t \t Clienti.update({_id:id、" cantieri._id ":idC}、{$ push:{ \t \t \t "cantieri.giorni":doc} \t \t}); \t} コンソールログは何も返さず、更新されたドキュメントはありません!どのようにそれを修正するのか分からない? –

+0

[forum meteor](https://forums.meteor.com/t/push-object-in-array-help-me-please/29493/3) –

答えて

0

Clientiコレクションを更新しようとするとエラーが表示されないことに驚いています。あなたのスキーマ定義でSimple Schema documentationによると、typeフィールドがStringNumberBooleanObjectまたはDateのようなコンストラクタ関数のようなデータ型である必要があり、あなたはの配列としてそれを定義するために、角括弧の中にこれらのいずれかを使用することができますそれらのデータ型(例えば、[String])。

したがって、Clientiコレクションでは、cantieriのデータタイプを[Clienti.Cantieri]と定義しています。これは受け入れ可能なデータ型ではありません。私はあなたが正しくやろうとしているものを理解していた場合、あなたはおそらくあなたのClientiコレクション内cantieriフィールドの定義は次のようになりたい:

cantieri: { 
    type: [Object], 
    optional: true, 
    autoform: { 
     type: "hidden" 
    } 
} 

そしてこの後、あなたが使用して、この項目の下に各cantieriフィールドを追加する必要があります形式:

cantieri.$.nome: { 
    type: String 
}, 
cantieri.$.luogo: { 
    type: String 
} 
ます。また、同じ形式で Clientiコレクションに cantieriフィールドの下 giorniフィールドを追加したい

あなたは上記のように、あなたのスキーマを結合したい場合、あなたはまた、使用して文書を更新することができるはず

aggiungiGiorno: function(id, idC, doc,) { 
    Clienti.update({ 
    _id: id, 
    "cantieri._id": idC 
    }, { 
    $push: { 
     "cantieri": doc 
    } 
    }); 
} 

UPDATE:

次に、データベースを更新するためにあなたの方法は、次のようになりますクエリ:

aggiungiGiorno: function(id, idC, doc,) { 
    Clienti.update({ 
    _id: id, 
    "cantieri._id": idC 
    }, { 
    $push: { 
     "cantieri.$.giorni": doc 
    } 
    }); 
} 
+0

[SimpleSchemasの組み合わせ](https://github.com/aldeed/meteor-simple-schema#combining-simpleschemas)それは同じではありませんか? –

+0

さらに、新しいSimpleSchemaはオブジェクトではありませんか? –

+0

私は自分の答えを更新しました。スキーマを結合するには、元のコードを保持し、更新プログラムでそのクエリを使用できるようにする必要があります。 – NFab

関連する問題