Mongoose不支持这种魔法。但是有一些变通方法可以解决这个问题。
定义一个静态函数:
在模式定义中,您可以定义一个静态函数来处理基于数组对象实例化所有模型的问题,例如:
var animalSchema = new Schema({ name: String, type: String });
animalSchema.static({
createCollection: function (arr, callback) {
var colection = [];
arr.forEach(function (item) {
});
callback(null, collection);
}
});
使用Model.create方法:
如果您不需要在保存模型实例之前真正地操纵它们,并且只想实例化并持久化到数据库,您可以使用Model.create
,它接受一个对象数组:
var animals = [
{ type: 'dog' },
{ type: 'cat' }
];
Animal.create(arr, function (error, dog, cat) {
});
但是,如果您有一个大的数组,回调函数将会接收到很多参数。在这种情况下,您可以尝试“泛化”:
Animal.create(arr, function () {
if (arguments[0]) throw arguments[0];
});
使用Model.collection.insert:
正如文档中所述,它只是一个必须由驱动程序实现的抽象方法,因此它没有任何mongoose处理,并且可能会向您的集合添加意外的字段。至少,如果您传递对象数组,它将持久化它们并返回一个带有填充方法的数组:
var animals = [
{ type: 'dog' },
{ type: 'cat' }
];
Animal.collection.insert(animals, function (error, docs) {
console.log(docs);
});
var dogs = new Animal( Array );
返回一个文档数组,还是询问如何将由自定义构造函数创建的动物模式中的name
和type
属性设置为包含 2 个字符串的数组? - Brian Shamblen