Подтвердить что ты не робот

Поддерживает ли Mongoose встроенные документы в массивы?

У меня есть данные в MongoDB, которые выглядят так:

{
    name: "Steve",
    location: {
        city: "Nowhere, IL",
        country: "The United States of Awesome"
    }
}

Я использую объекты для организации общих структур данных (например, местоположений), которые в Mongoose могут хорошо отображать Схемы. К сожалению, они, похоже, действительно не работают в Mongoose.

Если я просто вставляю объект, например:

{
    name: String,
    location: {
        city: String,
        country: String
    }
}

Кажется, что он работает, но демонстрирует какое-то странное поведение, которое вызывает проблемы для меня (например, instance.location.location возвращает location, а подобъекты наследуют методы из родительской схемы). я начал поток в списке Mongoose, но он не видел никаких действий.

Если я встраиваю схему, например:

{
    name: String,
    location: new Schema({
        city: String,
        country: String
    })
}

... мое приложение не запускается (Schema is not type, поддерживаемый Mongoose). То же самое для

{
    name: String,
    location: Object
}

... что бы не было идеальным.

Мне что-то не хватает или мои схемы не jive с Mongoose?

4b9b3361

Ответ 2

Я сделал что-то подобное:

var Topic = new Schema({
      author    : ObjectId
    , title     : String
    , body      : String
    , topics    : [Topic]
});

Это отлично работало в моих тестах. Тем не менее, удаление массивов приводит к ошибке. Похож на меня.

https://github.com/LearnBoost/mongoose/blob/master/lib/mongoose/schema.js#L185

Типы сбрасывания, я получаю только String, Number, Boolean, DocumentArray, Array, Date, ObjectId, Mixed - это, по-видимому, специально, schema/index.js не похоже, что он динамически регистрирует новые схемы для список типов, поэтому я предполагаю, что это еще не поддерживаемый вариант использования.

https://github.com/LearnBoost/mongoose/issues/188

"Внедрение отдельных документов не может быть и речи. Это не очень хорошая идея (просто используйте обычные вложенные объекты)"

Джош