Node.js 具有未知键和嵌套文档作为值的Mongoose模式
我有一份来自Mongo的文件,看起来像这样:Node.js 具有未知键和嵌套文档作为值的Mongoose模式,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一份来自Mongo的文件,看起来像这样: { teacher: { name: 'Fred' }, principal: { name: 'Bob' }, student: { name: 'Sally' } } var utils = require('restberry-utils'); var PersonSchema = new mongoose.Schema({ name: {type: String}, ... }); var Pers
{
teacher: { name: 'Fred' },
principal: { name: 'Bob' },
student: { name: 'Sally' }
}
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) {
...
});
在我的例子中,“教师”、“校长”和“学生”的属性完全是任意的,可以是任何旧字符串。在加载此特定文档之前,还不知道它们将是什么。但是,我知道此文档级别的每个属性的每个值都是相同的类型,因此可以对其进行验证
我想让这些价值观中的每一个都成为(一个“人”)来利用猫鼬的验证;但是,我无法找到一种方法告诉mongoose将所有值视为相同的模式类型,而不考虑键
顺便说一下,我不能将其转换为每个人都有“角色”类型或类似类型的数组。不幸的是,我不能控制数据结构,我只能使用它
任何想法都值得赞赏 如果您将其作为dict接收,您可以实现一个转换器方法,尝试将每个键值作为一个人进行解析,如下所示:
{
teacher: { name: 'Fred' },
principal: { name: 'Bob' },
student: { name: 'Sally' }
}
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) {
...
});
这能解决你的问题吗?@AdamTerlson我知道你的意思。理想的解决方案是让它自动解析,但你可以把它放在某个模块中,让它在任何时候都被调用,模仿一些自动化。我不知道,天空是极限:你是什么东西?