2015-08-03 2 views
2

У меня структуру документа, как это:Обновление элемента в массиве с уникальным идентификатором

Content { 
    _id: "mongoId" 
    Title: "Test", 
    Age: "5", 
    Peers: [{uniquePeer: "1", Name: "Testy Test", lastModified: "Never"}, {uniquePeer: "2", Name: "Test Tester", lastModified: "Never"}] 

} 

Так Peers массив, который имеет уникальный идентификатор. Как я могу обновить lastModified одного из наборов в массиве? Согласно mongodb, я могу только обновить документ, используя уникальный идентификатор документа, но это на верхнем уровне. Как я могу сказать, обновите это поле lastModified в этом наборе Peers с uniquePeer из 1 в этом документе?

Edit:

Content.update({"_id" : "mongoId", "Peers.uniquePeer" : "1"},{$set : {"Peers.$.lastModified" : "Now"}}) 

я все еще получаю ". Не разрешается Ненадежных код может только обновлять документы по ID"

+0

Я добавил обновление с тем, что вы говорите, является дубликатом. Кажется, я не могу заставить его работать на мою. –

+0

В моем коде мой '' 'uniquePeer''' не является целым числом, это руководство, которое имеет буквы и цифры, поэтому мне нужно поставить цитату вокруг нее. –

+0

Вы правы. Благодарю. Я обновил его. –

ответ

4

См. docs для обновления массива. Ваш код должен выглядеть примерно так:

сервера

Meteor.methods({ 
    'content.update.lastModified': function(contentId, peerId) { 
    check(contentId, String); 
    check(peerId, String); 

    var selector = {_id : id, 'Peers.uniquePeer': peerId}; 
    var modifier = {$set: {'Peers.$.lastModified': 'Now'}}; 
    Content.update(selector, modifier); 
    } 
}) 

клиента

Meteor.call('content.update.lastModified', contentId, peerId); 

Обратите внимание, что этот вид деятельности должен иметь место в методе сервера определенно, поскольку, как вы узнали, что вы можете обновлять документы только по id на клиенте.

+0

Строка * 'Now' * магически трансформируется mongo в * new Date() *? –

+0

Это было бы круто, но нет, я просто следовал его примеру. –

+0

Это была моя первоначальная мысль: «Разве манго просто представил новый трюк?» Итак, Джошуа, вы, вероятно, хотите 'new Date()' там. –

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