【问题标题】:Mongoose - mapping json object to SchemaMongoose - 将 json 对象映射到 Schema
【发布时间】:2017-09-16 23:43:48
【问题描述】:

我正在尝试学习 mongo/mongoose 并将 json 导入 mongodb。

我的 json 包含许多形式的对象:

{
   "FIELD1": "28/02/2017",
   "FIELD2": "string value",
   "FIELD3": "100"
 },
 {
   "FIELD1": "28/02/2017",
   "FIELD2": "string",
   "FIELD3": "57"
 },

我有一个架构:

var statementSchema = new Schema({
   //date: {type:Date, required: true},
   //name : {type:String, required:true},
   //amount: {type: Number, required:true}
   FIELD1 : {type:String, required:true},
   FIELD2: {type:String, required:true},
   FIELD3: {type:String, required:true}
});

您可以看到,我真的希望 db 中的键比它们在源 json 中的值更能描述它们包含的值(即,我希望 json 中的 FIELD1date 在数据库)。

最好的方法是什么?我见过 mongoose-aliasfield,这是最好的方法还是有默认方法来定义 FIELD1 as Schema 中的 someothername?

当我有你的时候,将 FIELD1 和 FIELD3 分别从 json 源中的当前字符串转换为 DateNumber 的正确方法是什么? ;)

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    尝试使用这种方式。参考Mongoose schema data type

    架构:

    var statementSchema = new Schema({
       FIELD1 : {type:Date, required:true},
       FIELD2: {type:String, required:true},
       FIELD3: {type:Number, required:true}
    });
    

    插入:

    db.getCollection('users').save({
       "FIELD1": Date("28/02/2017"),
       "FIELD2": String("string"),
       "FIELD3": Number("57")
     })
    

    结果:

    {
        "_id" : ObjectId("58f8ba663749f1f13fee40d6"),
        "FIELD1" : "Thu Apr 20 2017 19:10:54 GMT+0530 (IST)",
        "FIELD2" : "string",
        "FIELD3" : 57.0
    }
    

    【讨论】:

    • 感谢您。但是上面不是只定义了该字段需要的类型吗?如果我从具有该值作为字符串的源导入,也会转换为Date 等?
    • 谢谢。关于在模式定义中与输入 json 中具有不同键的选项,这是唯一/最佳选项github.com/ramiel/mongoose-aliasfield
    【解决方案2】:

    好吧,我真的是个新手。

    现在定义了架构:

    var statementSchema = new Schema({
    date : {type:Date, required:true},
    name: {type:String, required:true},
    amount: {type:Number, required:true}
    });
    

    我插入使用:

    var statements= require('../data/convertcsv.json');
    var Statement = require('../models/statement');
    var mongoose = require('mongoose');
    mongoose.connect('localhost:27017/statement');
    
    var parseDate = require('../helpers/parseDate');
    
    
    var done = 0;
    for( var i = 0; i < statements.length; i++ ) {
    var newStatement = new Statement();
    //helper function breaks string apart, reassembles and returns a Date
    newStatement.date = parseDate.stringToDate(statements[i].FIELD1);
    newStatement.name = statements[i].FIELD2;
    newStatement.amount = Number(statements[i].FIELD3);
    
    newStatement.save(function(err, result){
        done++;
        if(done === statements.length){
            exit();
        }
    });
    
    }
    
    function exit(){
    mongoose.disconnect();
    };
    

    【讨论】:

      猜你喜欢
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 2014-11-07
      • 2017-12-24
      • 1970-01-01
      相关资源
      最近更新 更多