Я только что начал создавать небольшое приложение с использованием MongoDB и не могу найти примеров, где я могу добавлять объекты в глубокий массив, который затем я могу найти на индивидуальной основе.Добавление объектов в глубокий массив в MongoDB
Позвольте мне проиллюстрировать следующий набор шагов, которые я беру, а также код, который я написал.
создать простой объект в MongoDB так:
testing = { name: "s1", children: [] };
db.data.save(testing);
Когда я запрашиваю это все выглядит красиво и просто до сих пор:
db.data.find();
Какие выходы:
{
"_id" : ObjectId("4f36121082b4c129cfce3901"),
"name" : "s1",
"children" : [ ]
}
Однако , после того, как я обновил массив «children», «нажав» в него объект, я попал в все виды проблем.
Сначала команда обновления, что я бегу:
db.data.update({ name:"s1" },{
$push: {
children: { name:"r1" }
}
});
Затем, когда я запрашиваю БД:
db.data.find({
children: { name: "r1" }
});
Результаты в:
{
"_id" : ObjectId("4f36121082b4c129cfce3901"),
"children" : [ { "name" : "r1" } ],
"name" : "s1"
}
Который не имеет никакого смысла мне, поскольку я бы ожидал следующее:
{
"name": "r1"
}
Есть ли лучший способ вставки данных в MongoDB, чтобы при выполнении запросов я извлекал отдельные объекты, а не все дерево? Или, возможно, лучший способ написать запрос «найти»?
Главным образом из-за того, как работают объекты JSON/BSON, особенно в массивах. Если кто-нибудь скажет: «Найдите мне конкретный комментарий для данного сообщения в блоге», на самом деле нет смысла возвращать сообщение в блоге + все остальные комментарии, но вместо этого только объект комментария. Я нашел ресурс на веб-сайте документации MongoDB, в котором упоминаются разные способы структурирования деревьев, но пока не нашел ничего полезного. –
Используйте эту функцию в ссылке, которую я перечисл, чтобы получить нужные поля. Есть еще много случаев, когда вы хотите получить больше, чем одно найденное поле, чем есть случаи, когда вам нужен только один маленький бит документа, возвращенный в ответ на поиск. –