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!!
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
});
let MyScheme = new Schema(
{ <optional - basic fields if you want> ...},
{strict: false }
)
let doc = new MyScheme(req.body)
doc.save({validateBeforeSave: false });
7条答案
按热度按时间lhcgjxsq1#
我想这就是你要找的 Mongoose 严格
选项:严格
strict选项(默认情况下启用)确保添加到模型示例中的、在模式中未指定的值不会保存到数据库中。
注意:除非有充分的理由,否则不要设置为false。
5m1hhzi42#
实际上,“混合”(
Schema.Types.Mixed
)模式似乎在Mongoose中做到了这一点。它接受一个无模式的,自由形式的JS对象-所以你可以扔给它任何东西。看起来你必须在之后手动触发保存该对象,但这似乎是一个公平的权衡。
混合
一个“任何事情都可以”的SchemaType,它的灵活性来自于它更难维护的代价。Mixed可以通过
Schema.Types.Mixed
或传递一个空的对象字面量来使用。以下是等效的:因为它是一个无模式类型,你可以将值更改为任何你喜欢的值,但是Mongoose失去了自动检测和保存这些更改的能力。要“告诉”Mongoose Mixed类型的值已经更改,请调用文档的
.markModified(path)
方法,将路径传递到您刚刚更改的Mixed类型。v2g6jxz63#
克里斯,你看一下Mongous。我在mongoose上也遇到了同样的问题,因为我的模式在开发中变化非常频繁。Mongous允许我拥有Mongoose的简单性,同时能够松散地定义和更改我的“模式”。我选择简单地构建标准JavaScript对象并将它们存储在数据库中,如下所示
比Mongoose简单得多,尽管我相信你错过了一些很酷的中间件,比如“pre”。但我不需要这些。希望这对你有帮助!!!
hc8w905p4#
以下是详细描述:[https://www.meanstack.site/2020/01/save-data-to-mongodb-without-defining.html][1]
z9gpfhce5#
注意:
{ strict: false }
参数将适用于创建和更新。hlswsv356#
方案模型中增加
{strict: false }
,保存事件中增加{validateBeforeSave: false }
s1ag04yj7#
这是不可能了。
您可以将Mongoose与具有模式和节点驱动程序的集合一起使用,或者使用其他mongo模块来处理那些无模式的集合。
https://groups.google.com/forum/#!msg/mongoose-orm/Bj9KTjI0NAQ/qSojYmoDwDYJ