Mongoose模式中的multidimensional array
我如何在Mongoose模式中定义multidimensional array? 我想在我的mongoose模式中有一个二维数组,以便在宾馆find这样的房间。
var Room = new Schema({ number: Number, type: String, // Room type id }); var Hotel = new Schema({ ... rooms: [[Room]] });
这是我得到的错误…
D:\projects\HotelBox\node_modules\mongoose\lib\schema\array.js:58 this.caster = new caster(null, castOptions); ^ TypeError: object is not a function at new SchemaArray
我可以通过将rooms
定义为Schema.Types.Mixed
来修复它,但是在创build时我无法validation房间数据。
AFAIK,目前在multidimensional array利用的mongoose中没有这样的支持。
这就是说,正如你所指出的,你可以通过使用Schema.Types.Mixed
SchemaType来解决这个问题,但是你将失去所有使用本地mongoosetypes的好东西。
但是,您可以通过使用自定义validation器来定义您自己的validation
来克服这个问题,就像在官方文档中指出的那样(它们非常易于使用)。 自定义validation唯一的警告是,它们仅在保存实例时才被触发。
如果您需要触发validation和启动时间,则可以使用更低级别的中间件挂钩 ,因为您可以通过以下操作调用它们,因此可以进行细粒度控制:
-
init
-
validate
-
save
-
remove
(注意init
钩子)
希望这可以帮助你克服你的用例。
您的模式定义必须是(我也根据您的模式重构了您的字段名称,使用保留的关键字字段可能很危险)。
var Room = new Schema({ room_number: Number room_type: String, // Room type id }); var Hotel = new Schema({ ... rooms: [Room] });
你可以在你的模型中放置房间的坐标
var Room = new Schema({ x: Number, y: Number, room_number: Number, room_type: String, // Room type id }); var Hotel = new Schema({ ... rooms: [Room] });
然后创build一个所有房间的数组:
var rooms = []; var i = 0; for (var y = 0; y<dim; y++) { for (var x = 0; x < dim; x++) { rooms[i] = new Room(x, y, ...); } }
然后在mongoose中insertMany
。 而在客户端,你可以遍历所有的数组,例如
var chunks = _.chunk(_.range(side*side), side) for (var chunk in chunks) { for (var i in chunk) { console.log(rooms[i]); } }
- 我怎样才能扩大findOneAndUpdatemongoose/ mongodb 500万更新?
- 在添加之前填充:RangeError:超出最大调用堆栈大小
- MongoDB的ObjectId用法
- Nodejs应用程序崩溃了heroku – 错误未能连接到本地主机:27017
- “Node.js中的某些MongoDB ObjectID”的参数必须是“string”
- 我如何使用Mocha和伊斯坦布尔编写出色的testing用例?
- MEAN堆栈中的validation…?
- 为什么在调用mongoose Model.create节点时不能链接.catch?
- 会话pipe理,Node + Express和Mongoose模式对象