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

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

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

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

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

4b9b3361

Ответ 1

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

: строгий

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

Примечание. Не устанавливайте значение 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!!

Ответ 2

На самом деле режим "Смешанный" (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

Ответ 3

Эй, Крис, посмотрите Mongous. У меня была та же проблема с мангустом, поскольку мои схемы очень часто изменяются прямо сейчас в процессе разработки. Монгуйский позволил мне иметь простоту Мангуста, хотя я мог свободно определять и изменять свои "схемы". Я решил просто создать стандартные объекты 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 it! You've saved a user
});

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