Как вы используете Mongoose без определения схемы? - PullRequest
101 голосов
/ 20 марта 2011

В предыдущих версиях Mongoose (для node.js) была возможность использовать его без определения схемы

var collection = mongoose.noSchema(db, "User");

Но в текущей версии функция noSchema была удалена.Мои схемы могут часто меняться и действительно не вписываются в определенную схему, так есть ли новый способ использовать модели без схем в mongoose?

Ответы [ 4 ]

148 голосов
/ 12 сентября 2012

Я думаю, это то, что вы ищете Mongoose Strict

опция: строгая

Параметр строгого режима (включен по умолчанию) гарантирует, что значения, добавленные в наш экземпляр модели, которые не были указаны в нашей схеме, не будут сохранены в БД.

Примечание. Не устанавливайте значение false, если у вас нет веских причин.

    var thingSchema = new Schema({..}, { strict: false });
    var Thing = mongoose.model('Thing', thingSchema);
    var thing = new Thing({ iAmNotInTheSchema: true });
    thing.save() // iAmNotInTheSchema is now saved to the db!!
53 голосов
/ 23 января 2012

Фактически режим "Смешанный" (Schema.Types.Mixed), похоже, делает именно то, что в Mongoose ...

он принимает без схемы , объект произвольной формы JS - так что все, что вы можете бросить на это.Похоже, что впоследствии вам нужно вручную запускать сохранения на этом объекте, но это выглядит как справедливый компромисс.

Смешанный

SchemaType «все идет», его гибкость проявляется в сделкеот этого быть сложнее поддерживать.Смешанный доступен либо через Schema.Types.Mixed, либо путем передачи пустого литерала объекта.Следующие значения эквивалентны:

var Any = new Schema({ any: {} });
var Any = new Schema({ any: Schema.Types.Mixed });

Поскольку это тип без схемы, вы можете изменить значение на любое другое, которое вам нравится, но Mongoose теряет возможность автоматического обнаружения и сохранения этих изменений.Чтобы «сообщить» Mongoose, что значение смешанного типа изменилось, вызовите метод .markModified(path) документа, передающего путь к смешанному типу, который вы только что изменили.

person.anything = { x: [3, 4, { y: "changed" }] };
person.markModified('anything');
person.save(); // anything will now get saved
14 голосов
/ 21 марта 2011

Привет, Крис, взгляни на Mongous .У меня была та же проблема с мангустом, поскольку мои схемы меняются очень часто прямо сейчас в процессе разработки.Mongous позволил мне иметь простоту Mongoose, в то же время имея возможность свободно определять и изменять мои «схемы».Я решил просто создать стандартные объекты JavaScript и сохранить их в базе данных, например,

function User(user){
  this.name = user.name
, this.age = user.age
}

app.post('save/user', function(req,res,next){
  var u = new User(req.body)
  db('mydb.users').save(u)
  res.send(200)
  // that's it! You've saved a user
});

Гораздо проще, чем Mongoose, хотя я уверен, что вам не хватает некоторых классных промежуточных программ, таких как "pre".Мне не нужно ничего из этого, хотя.Надеюсь, это поможет !!!

0 голосов
/ 21 марта 2011

Это больше невозможно.

Вы можете использовать Mongoose с коллекциями, которые имеют схему и драйвер узла, или другой модуль mongo для этих схем.

https://groups.google.com/forum/#!msg/mongoose-orm/Bj9KTjI0NAQ/qSojYmoDwDYJ

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