Документы mongoDB с поддокументами

У меня есть следующая структура:

  • Collection
    • document
      • message
        • field 1
        • поле 2
        • поле 3

Документ начнется, как и раньше, мне нужно будет найти документ, выполнив поиск, например:

db.document.find({"message.field1": "a"})

и когда он будет найден, добавьте еще одно сообщение в виде массива, и в итоге это будет выглядеть так:

  • Collection
    • document
      • message
        • field 1
        • поле 2
        • поле 3
      • message (new doc)
        • field 1
        • поле 2
        • поле 3

Я пытаюсь сделать:

db.packets.update(
    { $or: [
        { "message.field1": "a" } , { "message.field2":  "a" }
    ]},
    {
        packet: {
            "packet" : {
                "field1" : "whatever",
                "field2" : "Whatever",
                "field3" : "blahblah"
            }
        }
    },
    {
        upsert: true
    } )

Но mongo, похоже, не находит поддокумент, который я ищу... возможно ли иметь несколько массивов? Я думаю, может быть, mongodb не позволяет иметь несколько вложенных документов с одинаковым именем?

Спасибо ребята,

Дэйвид


person David Villasmil    schedule 03.08.2014    source источник
comment
Сообщения находятся в массиве? И ваше обновление не имеет никакого смысла. Нет оператора.   -  person ma08    schedule 03.08.2014
comment
Не могли бы вы поделиться одним документом, поскольку он хранится в базе данных - результат db.packets.findOne()- и каким вы хотите, чтобы он был после обновления?   -  person Enrique Fueyo    schedule 03.08.2014


Ответы (1)


Я нашел свою проблему, по крайней мере, я думаю, что нашел:

Этот:

{
    packet: {
        "packet" : {
            "field1" : "whatever",
            "field2" : "Whatever",
            "field3" : "blahblah"
        }
    }
}

На самом деле должно быть:

{
    "packet" : {
        "field1" : "whatever",
        "field2" : "Whatever",
        "field3" : "blahblah"
    }
}

С первым я искал "packets.packets.field1", и я использую "packets.field1", поэтому мне пришлось изменить иерархию...

Спасибо всем за вашу помощь!

person David Villasmil    schedule 03.08.2014