是否有将基于字符串的JSON转换为Mongoose Schema对象实例的本地功能
Is there a native feature to convert string based JSON into Mongoose Schema object instance?
我正在使用Express,我正在寻找一种方便的方法来转换这种对象(根据请求req.body.myObject
):
{
"name": "Foo",
"someNumber": "23",
"someBoolean": "on"
}
进入此模式的实例:
var myObjectSchema = new Schema({
name: String,
someNumber: Number,
someBoolean: Boolean
});
请注意,第一个对象来自请求,因此它完全由Strings组成。
有什么好方法可以做到这一点吗?如果没有,您对如何将此功能作为中间件来实现有什么建议吗???
通过参考这个线程Mongoose:将JS对象直接插入数据库,我发现是的,这是一个内置的功能。
您只需构建一个新模型,将请求值(来自表单)作为参数:
function add(req, res){
new Contact(req.body.contact).save(function(err){
console.log("Item added");
res.send();
});
};
它会自动为您转换内容!
我知道这个答案已经被接受了,但我想指出的是,猫鼬为你负责大部分选角。。。大多数时候。虽然猫鼬这样做很方便,但它抽象了猫鼬的真实行为。例如,猫鼬可以让你做这样的事情:
PersonModel.findById("4cdf00000000000000007822", ...);
但是,如果您尝试直接查询数据库(没有猫鼬),这将不起作用:
PersonCollection.find({_id: "4cdf00000000000000007822"}, ...);
这是因为ObjectId不是字符串。。。它们是物体。在内部,mongoose将该字符串转换为ObjectId,然后对数据库执行查询,这样最后的查询看起来有点像:
PersonCollection.find({_id: ObjectId("4cdf00000000000000007822")}, ...);
此外,模式中的每个路径都有一个"caster"方法。这是一个私有方法,但当你需要它时,它非常方便。请注意,下面描述的caster
方法是未提及的,可以在没有警告的情况下更改。使用风险自负(抱歉大喊大叫):
// Use PersonModel.schema.paths() to get all paths and loop over them if you want
var key = "name";
var pathObj = PersonModel.schema.path( key );
if( !pathObj ) pathObj = PersonModel.schema.virtualpath( key );
if( !pathObj ) { /* not found: return, continue, exit, whatever */ }
// UNDOCUMENTED: USE AT YOUR OWN RISK
var caster = pathObj.caster || pathObj;
var castedValue = caster.cast( req.body.name );
为什么我知道这个?因为如果你想使用mongo的一些更高级的功能,比如聚合,你需要在构建管道时转换你自己的值。我还需要为使用$in
运算符的某些查询手动强制转换值。。。也许这已经不再需要了。重点是,如果你在获得预期结果方面遇到困难,试着自己铸造价值观。
如果模式是静态的,理论上可以采用惰性的、非复杂的方式,只对值进行硬编码,而不是传递对象本身:
var someObject = {
name: "Foo",
someNumber: "23",
someBoolean: "on"
}
var myObjectSchema = new Schema({
name: someObject.name,
someNumber: parseInt(someObject.someNumber, 10),
someBoolean: (someObject.someBoolean == "on")
});
可能不是你想要的答案,但如果没有更好的答案,可能需要考虑。
- 使用promise和mongoose对文档进行排序
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- mongoose.connect undefined不是一个函数
- Mongoose-在更新中删除数组元素
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- 预保存钩子:mongoose中回调的顺序如何
- Mongoose传递类函数
- 将mongoose javascript代码转换为typescript.此引用丢失
- Mongoose查询嵌套文档的时间或多或少为某个日期
- Javascript RegEx to XML Schema RegEx
- Cucumber+Mongoose给了我Schema has'尚未注册型号
- 是否有将基于字符串的JSON转换为Mongoose Schema对象实例的本地功能
- Mongoose schema
- Schema.pre in Mongoose modules (NodeJS)
- Mongoose,在mongoose.model('core_user').schema = new m
- mongoose插件抛出错误:MissingSchemaError:Schema没有't已注册为型号“t”;预约
- Mongoose save不是使用schema的函数
- 使用mongoose为NodeJS创建数组Schema的数组
- 在Mongoose Schema中,将一个数组写入另一个数组