Добавление объектов в глубокий массив в MongoDB - PullRequest
0 голосов
/ 11 февраля 2012

Я только начал создавать небольшое приложение, используя 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" 
}

Что не имеет для меня никакого смысла, поскольку я ожидал бы 1028 * следующего:

{ 
  "name": "r1"
}

Есть ли лучший способ вставки данных в MongoDB, чтобы при выполнении запросов я извлекал отдельные объекты, а не все дерево? Или, возможно, лучший способ написания запроса "find"?

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

По умолчанию mongodb find возвращает все поля (например, * from в sql).Вы можете извлечь конкретное поле, указав имя поля.

  db.data.find({  "children.name": "r1" },'children.name');
0 голосов
/ 11 февраля 2012

Почему вы ожидаете, что не вернете только часть документа? Он возвращает весь документ, если вы не укажете ему, какие поля вы хотите явно включить или исключить. Смотри http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...