Как вы используете Mongoose без определения схемы?
В предыдущих версиях Mongoose (для node.js) была возможность использовать его без определения схемы
var collection = mongoose.noSchema(db, "User");
Но в текущей версии функция "noSchema" была удалена. Мои схемы могут часто меняться и действительно не вписываются в определенную схему, так есть ли новый способ использования моделей без схемы в мангусте?
Ответы
Ответ 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". Мне это ни в коем случае не нужно. Надеюсь, это поможет!!!
Ответ 4
Его больше не возможно.
Вы можете использовать Mongoose с коллекциями с схемой и драйвером node или другим модулем mongo для этих схемных.
https://groups.google.com/forum/#!msg/mongoose-orm/Bj9KTjI0NAQ/qSojYmoDwDYJ