Node.js 使用Mongoose在数据库中保存模式

Node.js 使用Mongoose在数据库中保存模式,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我试图使用Mongoose将模式直接保存在DB中。以下是要保存在MongoDB中的代码(schema.js): var mongoose = require('mongoose'); var Mixed = mongoose.Schema.Types.Mixed; var modelSchema = mongoose.Schema({ schemaname:String, object : Mixed }) var Model = mongoose.model('Model',modelSch

我试图使用Mongoose将模式直接保存在DB中。以下是要保存在MongoDB中的代码(schema.js):

var mongoose = require('mongoose');
var Mixed = mongoose.Schema.Types.Mixed;
var modelSchema = mongoose.Schema({
schemaname:String,
object : Mixed
})

var Model = mongoose.model('Model',modelSchema);

exports.createModel = function(model){
var model_to_create = new Model(model);
console.log("creating a schema..." + model)
model_to_create.save(function(err,data){
    console.log("Saving a schema...")
    if(err){
        return "model creation failed";
    }else {
        return "model creation success";
    }
});
}

我正在使用以下代码创建模式:

var schema = require('../schemas/schema');     
var status = schema.createModel({
    "username": String,
    "firstname": String,
    "lastname": String,
    "description": String,
    "education": String
})
由于某些原因,该架构未保存在数据库中。 当我打印“状态”时,我得到“未定义”


有人能帮我解决这个问题吗?

保存模型是一个异步操作,您必须等到调用回调后才能读取结果。一种常见的方法是传递一个函数,保存完成后将调用该函数:


如果您想/需要等待保存所有条目后再继续,可以将其用作协调多个异步操作的一种方式。

保存模型是一种异步操作,您必须等到调用回调函数后才能读取结果。一种常见的方法是传递一个函数,保存完成后将调用该函数:


如果您想/需要等待保存所有条目后再继续,可以将其用作协调多个异步操作的一种方式。

要添加到上一个答案, 要保存mongoose数据类型,有一种简单的方法: 将它们另存为字符串。从数据库检索模式数据时,只需使用
mongoose.schema.Types[“String”]
即可获得String的数据类型

我有一个类似的用例,我创建了一个简单的递归函数来转换保存在Schema对象中数据库中的Schema数据:

function changeSchemaType(fields) {
    var f;
    for(key of Object.keys(fields)) {
        f = fields[key];
        if(f.type && typeof f.type === 'string') {
            f.type = mongoose.Schema.Types[f.type]
        } else if(Array.isArray(f.type)){
            f.type = [mongoose.Schema.Types[f.type[0]]];
        } else {
            changeSchemaType(f);
        }
    }
}
该函数还允许创建类型数组,只需传递:
[“String”]
for type

举例来说:

var data = {
    data1 : {type : "Number", required : true},
    data2 : {type : ["String"]}
}
changeSchemaType(data);
var mySchema = new Schema("mySchema", data)

该函数不处理类似于
字段的速记语法:“Mixed”
,但如果需要,可以对其进行调整。

要添加到前面的答案中, 要保存mongoose数据类型,有一种简单的方法: 将它们另存为字符串。从数据库检索模式数据时,只需使用
mongoose.schema.Types[“String”]
即可获得String的数据类型

我有一个类似的用例,我创建了一个简单的递归函数来转换保存在Schema对象中数据库中的Schema数据:

function changeSchemaType(fields) {
    var f;
    for(key of Object.keys(fields)) {
        f = fields[key];
        if(f.type && typeof f.type === 'string') {
            f.type = mongoose.Schema.Types[f.type]
        } else if(Array.isArray(f.type)){
            f.type = [mongoose.Schema.Types[f.type[0]]];
        } else {
            changeSchemaType(f);
        }
    }
}
该函数还允许创建类型数组,只需传递:
[“String”]
for type

举例来说:

var data = {
    data1 : {type : "Number", required : true},
    data2 : {type : ["String"]}
}
changeSchemaType(data);
var mySchema = new Schema("mySchema", data)

该函数不处理类似于
字段:“Mixed”
的速记语法,但可以根据需要进行调整。

非常感谢。但问题在于直接在MongoDB中保存字符串、数字等数据类型。我不确定这个问题是否有解决办法。谢谢@robertklep。对于我试图构建的应用程序,Mongoose弊大于利。模式限制已经成为一个主要问题,我决定放弃mongoose,转而使用mongojs,它是本机驱动程序之上的一种轻薄外观,限制较少,可以释放Nosqls的灵活性,这非常感谢。但问题在于直接在MongoDB中保存字符串、数字等数据类型。我不确定这个问题是否有解决办法。谢谢@robertklep。对于我试图构建的应用程序,Mongoose弊大于利。模式限制已经成为一个主要问题,我决定放弃mongoose,转而使用mongojs,它是本机驱动程序之上的一个轻薄的外壳,限制较少,可以释放NOSQL的灵活性