我有Mongo的文档看起来像这样:
{
teacher: { name: 'Fred' },
principal: { name: 'Bob' },
student: { name: 'Sally' }
}
就我而言,"老师","校长"和#34;学生"完全是任意的,可以是任何旧的字符串。在加载这个特定文档之前,它是未知的。但是,我知道此文档级别的每个属性的每个值都属于同一类型,因此可以对其进行验证。
我想将这些值中的每一个设为sub-document within Mongoose(a" Person")以利用Mongoose的验证;但是,我无法找到一种方法来告诉mongoose将所有值视为相同的模式类型而不管密钥。
顺便说一句,我无法将其转换为数组,其中每个人都有"角色"类型或类似的东西。遗憾的是,我无法控制数据结构,我只是去消费它!
任何想法都赞赏!
答案 0 :(得分:0)
如果你接受这个作为dict,你可以实现一个转换器方法,试图将每个键值解析为Person,如下所示:
var utils = require('restberry-utils');
var PersonSchema = new mongoose.Schema({
name: {type: String},
...
});
var Person = mongoose.model('Person', PersonSchema);
var parsePersons = function(persons, next) {
var parsedPersons = {};
var names = Object.keys(persons);
utils.forEachAndDone(names, function(name, iter) {
var personData = persons[name];
Person.findOne(personData, function(err, person) {
if (err) ...
if (!person) {
person = new Person(personData);
}
parsedPersons[name] = person;
person.save(iter);
})
}, function() {
next(parsedPersons);
})
};
var persons = ... // your dict
parsePersons(persons, function(parsedPersons) {
...
});
这会解决您的问题吗?