我有一个对象:
{ SKU: 'TR1234',
Description: 'Item 1',
UoM: 'each',
client_id: '531382e3005fe0c926bd3957',
Meta: { Test: 'test1', Image: 'http://www.aol.com' } }
我正在尝试根据我的架构保存它:
var ItemSchema = new Schema({
sku: {
type: String,
trim: true,
},
description: {
type: String,
trim: true,
},
company_id: {
type: Schema.ObjectId,
ref: 'Client',
},
createdOn: {
type: Date,
default: Date.now
},
updatedOn: {
type: Date,
default: Date.now
}
}, {versionKey: false});
但它没有保存,我认为这是因为大写的关键名称。但是,这些是从使用https://github.com/Keyang/node-csvtojson
解析的CSV动态生成的想法?
答案 0 :(得分:5)
如何在对象的每个键上调用toLowerCase(),并使用小写键构建一个新对象?
// Assumy your object name is obj
var newObj = {};
Object.keys(obj).forEach(function(key) {
newObj[key.toLowerCase()] = obj[key];
});
// Here you can save your newObj
答案 1 :(得分:3)
你也可以在你的猫鼬模式中使用一个setter,就像那样:
function toLower (v) {
return v.toLowerCase();
}
var UserSchema = new Schema({
email: { type: String, set: toLower }
});
只需将它应用到你的领域。
There is also one more approach, just:
email : { type: String, lowercase: true }
更新密钥: 如果您想更改密钥,您应该采用下面提到的“ecdeveloper”方法。我的答案是价值观,所以将这种声誉赋予“ecdeveloper”是有意义的。抱歉令人困惑。
这是另一种不创建新对象的方法:
Object.prototype.keysToUpper = function () {
var k;
for (k in this) {
if (this.hasOwnProperty(k))
this[k.toLowerCase()] = this[k];
delete this[k];
}
return this;
};