2015-08-19 3 views
2

У меня есть следующие схемы:Meteor: Добавить поддокумент к существующей записи

dGroup = new SimpleSchema({ 
    title:  { type: String, optional: true }, 
    element: { type: String, optional: true } 
}); 

MongoDB.attachSchema(new SimpleSchema({ 
    title:  { type: String }, 
    slug:  { type: String, unique: true }, 
    language: { type: String, defaultValue: "en" }, 
    group:  { type: [dGroup], optional: true }, 
})); 

... и в БД я получил это:

{ "_id" : "ag9qXWpCYm87kZbEk", "title" : "Test", "slug" : "test", "language" : "en" } 

Теперь я хочу добавить DGROUP -> название:

updates['group.title'] = 'insert this as a new group title with no element'; 
MongoDB.update({ _id: Id }, { $push: updates }, function(error) { if(error) console.warn(error); }); 

Но это не работает. Поэтому мне нужна помощь для добавления вложенных документов в метеор, если они не существуют.

+0

документы говорят, если поле не является массивом, то произойдет сбой операции ($ толчок). Я думаю, что дочерний элемент технически не является массивом? (название) Работает ли он с $ set? – user2865446

+0

нет этого нет :-( – user3142695

ответ

1

Попробуйте объявить свой объект первым и толкать его должным образом, как это:

var newGroup = { 
    title: 'insert this as a new group title with no element' 
}; 
MongoDB.update({ _id: Id }, { $push: {group: newGroup }}, function(error) { if(error) console.warn(error); }); 
+0

Не могли бы вы объяснить разницу между вашим кодом и моим? – user3142695

+1

В основном вы делали 'MongoDB.update ({_id: Id}, {$ push: {'group.title': ' some string '}}) '. Итак, в вашем случае Mongo ожидает, что свойство' dGroup.title' будет 'Array'' String', но ваша схема говорит иначе: это говорит о том, что это просто 'String'. хочу, чтобы Mongo нажал 'Object' (а не' String') в 'MongoDB.group', который удобно * * определен как' Array' 'Object' в вашей схеме. – SylvainB

+0

ok, получил его . благодаря! – user3142695

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