2013-08-20 2 views
2

Я использую mongoid 3.1 с Ruby 1.9.3, и я пытаюсь обновить значение в массиве. Я могу успешно выполнить следующую команду в CLI mongodb, но не могу найти подходящее решение/перевод для mongoid.mongoid элементы обновления внутри массива

user.update({ activities: { $elemMatch: { uuid: "1111111-xxxx-xxxx" }}}, { $set: { 'activities.$.submitted': true }}) 

Для контекста документа выглядит следующим образом:

{ 
    "_id" : ...., 
    "user_name" : "bob", 
    "activities: [ 
     { 
      uuid: "1111111-xxxx-xxxx", 
      submitted: true, 
     }, 
     { 
      uuid: "222222-xxxx-xxxx", 
      submitted: false, 
     }, 
     { 
      uuid: "333333-xxxx-xxxx", 
      submitted: false, 
     } 
    ] 
} 

Цель состоит в том, чтобы измениться представляется истинным на основе UUID значения. Из того, что я могу сказать, все «обновления» решений в mongoid касаются только атрибутов в корневом каталоге документа и не могут иметь опций для оператора $ positional.

Любая помощь будет оценена по достоинству.

Спасибо

+1

Похоже, я нашел ответ в обсуждении вопроса GitHub. Решение для меня было: User.elem_match (действия: {type: "redemption"}). Elem_match (действия: {uuid: uuid}). Update ("$ set" => {"activities. $. отправлено "=> true}) –

ответ

2

Похоже, я нашел ответ в обсуждении вопроса GitHub.

Решение для меня было:

User.elem_match(activities: { type: "redemption" }).elem_match(activities: { uuid: uuid }).update("$set" => {"activities.$.submitted" => true }) 
Смежные вопросы