2013-07-14 2 views
1

Давайте предположим следующую схему:MongoDB: Upserting и Суб документы

{ 
    '_id' : 'star_wars', 
    'count' : 1234, 
    'spellings' : [ 
    { spelling: 'Star wars', total: 10}, 
    { spelling: 'Star Wars', total : 15}, 
    { spelling: 'sTaR WaRs', total : 5} ] 
} 

я могу обновить количество и один из вариантов написания, делая это:

db.movies.update( 
    {_id: "star_wars", 
    'spellings.spelling' : "Star Wars" }, 
    { $inc : 
     { 'spellings.$.total' : 1, 
     'count' : 1 }} 
) 

Но эта форма обновления Безразлично» t работать с upsert. то есть, если я пытаюсь обновить (с upsert) с _id, который не существует, или с орфографией, которая еще не существует, ничего не происходит.

Есть ли решение, которое позволяет мне обновлять при обновлении ($ inc) поддоку?

Спасибо!

+0

Показать запрос с 'upsert', который не работает, поэтому мы можем помочь вам. Если вы используете указанный выше запрос с опцией 'upsert', то не будет определено' 'новая орфография', поэтому, в конце концов, она не добавит. Он просто обновит существующие варианты написания – Schaliasos

+0

Я пробовал вышеуказанный запрос с опцией upsert. Есть ли другой способ написать его? Я в основном хочу обновить «count» и «total» для определенной орфографии (с +1 каждым), но с upsert (то есть, если будет создан целый документ, если _id не сопоставлен или под-документ будет создается, если _id соответствует, но конкретного написания не существует). –

+0

Возможный дубликат критерия соответствия элементов Upsert Array в документе MongoDB?] (Http://stackoverflow.com/questions/8871363/upsert-array-elements-matching-criteria-in-a-mongodb-document) – WiredPrairie

ответ

2

Вы можете немного изменить свою схему. Если ваши документы выглядели так:

{ 
    '_id' : 'star_wars', 
    'count' : 1234, 
    'spellings' : 
    { 
     'Star wars': 10, 
     'Star Wars': 15, 
     'sTaR WaRs': 5 
    } 
} 

Ваши обновления стали бы так просто, как:

db.movies.update({_id:"star_wars"},{$inc:{"spellings.Star Wars":1}},true) 
+0

Stefan, именно там я и начал, но тогда у меня есть эта проблема: http://stackoverflow.com/questions/17639651/mongodb-aggregation-framework :) –

+0

Я вижу. Я не думаю, что есть решение, которое решит обе ваши проблемы :( –

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