Mongoose — Как я могу сделать эти данные более удобными для использования?

#json #mongoose

#json #mongoose

Вопрос:

У меня есть следующая структура данных, выводимая из моей схемы в приложении node / express. Я бы хотел, чтобы массив каналов представлял собой просто массив пар имя: ключ. Мне не нравится странная структура пронумерованных объектов, происходящая между «каналами» и фактическими данными каналов. Но я не могу понять, как вручную определить это в mongoose. любая помощь была бы потрясающей. Спасибо!

выведенный JSON

 {
"title": "Testing",
"created_at": "2011-10-05T16:23:26.217Z",
"feeds": [{
    "0": {
        "name": "twitter",
        "key": "person1"
    },
    "1": {
        "name": "twitter",
        "key": "person2"
    },
    "_id": "4e8c847e02edc10035000003"
}]
  

}

я хочу это:

 {
  "title": "Testing",
  "created_at": "2011-10-05T16:23:26.217Z",
  "feeds": [
    {
      "name": "twitter",
      "key": "person1"
    },
    {
      "name": "twitter",
      "key": "person2"
    }
  ],
  "_id": "4e8c847e02edc10035000003"
}
  

это моя схема:

 var Feed = new Schema({
  name        : { type: String }
, key         : { type: String }
});

var Page = new Schema({
    title         : { type: String, required: true, index: { unique: true } }
  , feeds         : [Feed]
  , created_at    : { type: Date, required: true, default: Date.now }
});
  

Ответ №1:

Хорошо, коллега смог ответить на это за меня. Я виноват в том, что не опубликовал соответствующий код, я не понял, в чем проблема на самом деле. Но для тех, кто может столкнуться с этой проблемой:

Если вы вставляете свои встроенные документы в модель при сохранении, вам может потребоваться выполнить цикл forEach вместо того, чтобы объединять встроенные документы (в данном случае каналы). Используя forEach, база данных сохраняла каналы непосредственно в массив каналов, а не создавала эти странные группировки.

Это правильно подтолкнуло каналы:

   req.body.feed.forEach(function(feed){
     page.feeds.push(feed);
  });
  

Дайте мне знать, если у вас такая же проблема и вам нужно больше объяснений.