Первоначальный POST для MongoDB создает пустой объект в массиве, к которому я ничего не добавил - PullRequest
0 голосов
/ 27 апреля 2020

Используя стек MERN, я могу добавить документ (в данном случае схему свойств) через Mon goose. Проблема заключается в том, что один из ключей свойств (в данном случае комнаты) - это массив объектов. Когда я первоначально создаю Свойство, я не отправляю никаких данных относительно Комнаты, но создается пустой Объект, хотя с MongoDB _id?

Я думал, что Mon goose запретил создание пустых Объектов / Массивов, если нет данных был отправлен или я путаю дела? Почему это происходит? И есть ли способ предотвратить это?

Просто чтобы прояснить, когда я первоначально создаю Свойство, я не посылаю никакой информации, и я даже не ссылаюсь на массив комнат в данных, отправленных с топора ios .

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

const propertySchema = new Schema({
    propertyId: String,
    propertyName: String,
    rooms: [
        rId: String,
        type: String,
        class: String,
        view: String,
        price: String
    ]
})

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Массивы неявно имеют значение по умолчанию [] (пустой массив).

Но вы можете предотвратить это, задав параметр default: undefined, например:

const propertySchema = new Schema({
  propertyId: String,
  propertyName: String,
  rooms: {
    type: [
      new Schema({
        rId: String,
        type: String,
        class: String,
        view: String,
        price: String,
      }),
    ],
    default: undefined,
  },
});

Документы (в разделе Массивы)

0 голосов
/ 28 апреля 2020

Я понял, что у меня есть два контроллера, postPropertyController и patchPropertyController. Как описано в вопросе, когда я публикую недвижимость впервые, я не включаю ничего в требование о комнатах. Однако в postPropertyController я все еще делал это ...

const propertySchema = new Schema({
    propertyId: String,
    propertyName: String,
    rooms: [
        rId: String,
        type: String,
        class: String,
        view: String,
        price: String
    ]
})

Что мне нужно было сделать, чтобы очистить пустой объект в массиве Rooms, это ...

const propertySchema = new Schema({
    propertyId: String,
    propertyName: String,
    rooms: []
})

Позже в потоке приложения я использовал метод patch и patchPropertyController для обновления массива комнат.

Приветствую @suleymanSah за предложение чего-то, что заставило меня еще раз взглянуть на код рядом.

...