2016-09-19 3 views
0

Я новичок в метеор и монго Я хотел бы нажать один объект в массиве, который является содержимым в другом массиве. Я хотел бы нажать giorni на 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

Что-то вроде [этого] (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 поле должно быть типом данных, как String, Number, Boolean, Object или функцию конструктора как Date, и вы можете использовать любой из них внутри квадратных скобок, чтобы определить его как массив эти типы данных (например, [String]).

Итак, одна проблема заключается в том, что в вашей коллекции Clienti вы определили свой тип данных для cantieri как [Clienti.Cantieri]. Это не приемлемый тип данных. Если я понять, что вы пытаетесь сделать правильно, то вы, вероятно, хотите, определение cantieri поля в вашем Clienti коллекции выглядеть следующим образом:

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

И после этого, вам нужно добавить каждый cantieri поля в рамках этого пункта с помощью формат:

cantieri.$.nome: { 
    type: String 
}, 
cantieri.$.luogo: { 
    type: String 
} 

Вы также хотите добавить giorni поля под cantieri полей в Clienti коллекции в том же формате:

giorni: { 
    type: [Object], 
    optional: true, 
    autoform: { 
     type: "hidden" 
    } 
}, 
giorni.$.giorno: { 
    type: Date, 
    label: "giorno del lavoro" 
}, 
giorni.$.oraPartenza: { 
    type: Date, 
    label: 'Giorno e ora partenza', 
} 

Затем ваш метод для обновления базы данных будет выглядеть примерно так:

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

Смежные вопросы