Монго нажать на массив внутри массива - PullRequest
2 голосов
/ 09 февраля 2012

Я новичок в Монго, и до сих пор не было проблем с его использованием.Пока я не застрял в этом.Мне нужно отправить документ в массив внутри массива.См. Ниже json.

{
    'user_id':'{1231mjnD-32JIjn-3213}',
    'name':'John',
    'campaigns':
        [
            {
                'campaign_id':3221,
                'start_date':'12-01-2012',
                'messages':
                    [
                        {
                            'message_id':211134,
                            'email':'john@gmail.com'
                        }
                    ]
            },
            {
                'campaign_id':3222,
                'start_date':'13-01-2012',
                'messages':
                    [
                        {
                            'message_id':315521,
                            'email':'john@gmail.com'
                        }
                    ]
            }
        ]
}

Я хочу отправить один документ в массив сообщений в массиве кампаний (независимо от порядка).Это означает, что мне нужно добавить новый документ в массив сообщений.И все эти сообщения находятся внутри другого массива или кампаний на пользователя.Я использую Python, поэтому мой код будет выглядеть следующим образом.

query = {"user_id" : "{1231mjnD-32JIjn-3213}", "campaigns.campaign_id": 3221}
message = {"message_id":4213122, "email":"john@gmail.com"}
op = {"$push" : {"campaigns.messages":message}}
mongo.TestDatabase.members.update(query, op)

Нет ошибок при выполнении.Но в документе, похоже, нет изменений (обновление не сделано).Что я здесь не так делаю?

1 Ответ

2 голосов
/ 09 февраля 2012

Наличие массивов внутри массивов почти всегда является плохой идеей по ряду причин. Я бы поместил кампании в отдельную коллекцию, чтобы они стали документами высшего уровня.

Тем не менее, вы можете нажать на массив сообщений конкретной кампании через:

db.members.update(
    {"user_id" : "{1231mjnD-32JIjn-3213}", "campaigns.campaign_id": 3221},
    {$push:{"campaigns.$.messages":{"message_id":4213122, "email":"john@gmail.com"}}}
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...