Примечание: я закончил тем, что отвечал на свой вопрос вскоре после того, как опубликовал это.Спасибо и извините, если вы потратили время на чтение моего длинного поста.
Введение
Я своего рода моногий нуб, просто пытаюсь разобраться в этом.
Я пытаюсь создать иерархическую структуру данных, к которой я могу динамически добавлять узлы / листья.Схема является фиксированной, но узлы в любом данном дереве должны быть в состоянии изменить в любое время.Главное, что я ищу, это как добавить / удалить узлы на глубоко вложенных узлах без переписывания всего дерева.
Вот пример для программы статического анализа, коллекция называется "builds" .Разреженный документ будет выглядеть так (_id удален для краткости):
{ name: "build from changeset #5678",
assemblies: [
{ name: "someAssembly1.dll",
warnings: [
{ level: 0,
message: "something doesn't conform to our standard"
}
]
}
]
}
Итак, чтобы начать, я делаю следующее:
db.builds.insert({name: "build from changeset #5678})
Затем добавьте сборку:
db.builds.update({name: "build from changeset #5678"},
{$addToSet: {assemblies: {name: "someAssembly1.dll"}}})
РЕАЛЬНЫЙ вопрос
Теперь, как добавить предупреждение? Я думал, что это может быть что-то вроде этого:
db.builds.update({
name: "build from changeset #5678",
"assemblies.name": "someAssembly1.dll"
},{
$addToSet: {
assemblies.warnings: {
level: 0,
name: "something doesn't conform to our standard"
}
}
})
Но это дает мне "отсутствует: после id свойства (shell): 0"
Я также попытался поместить кавычки вокруг "assembly.warnings" , но там написано, что "нельзя добавить в массив, используя имя строкового поля [warnings]"
Кто-нибудь знает Монго лучше меня и может мне помочь?
Я ошибаюсь, пытаясь сделать глубоко вложенные деревья на Монго?Будет ли мне лучше делать это с несколькими коллекциями и несколько реляционными?
У меня сложилось впечатление, что НЕ выполнение реляционных (а также ACID) было одним из основных преимуществ для Mongo, но опять же, может быть, это просто мой нуб снова показывает.