【问题标题】:Mongoose schema workaround for multidimensional array多维数组的猫鼬模式解决方法
【发布时间】:2014-06-21 23:27:07
【问题描述】:
我正在编写一个必须为网格保存数据的网络应用程序。像战舰一样思考。我希望能够做到这一点:
var block = mongoose.Schema({
type: Number,
colour: String
});
var schema = mongoose.Schema({
grid: [[block]]
});
但是,由于不支持多维数组,这似乎是不可能的。嘘!任何人都可以建议解决这个问题吗?我想要多数组格式的块,所以我可以使用坐标来访问它们。
【问题讨论】:
标签:
node.js
mongodb
multidimensional-array
mongoose
【解决方案1】:
一种可能的解决方法是使用Schema.Types.Mixed。假设您需要创建一个由 block 对象组成的 2x2 数组(我尚未测试此代码):
var mongoose = require('mongoose')
, Schema = mongoose.Schema,
, Mixed = Schema.Types.Mixed;
var block = new Schema({
type: Number,
colour: String
});
var gridSchema = new Schema({
arr: { type: Mixed, default: [] }
});
var YourGrid = db.model('YourGrid', gridSchema); // battleship is 2D, right?
现在,假设您在这里创建了 4 个“块”对象(block1、block2、block3、block4),那么您可以这样做:
var yourGrid = new YourGrid;
yourGrid.arr.push([block1, block2]);
// now you have to tell mongoose that the value has changed
// because with Mixed types it's not done automatically...
yourGrid.markModified('arr');
yourGrid.save();
然后,对接下来的 2 个对象执行相同操作,block3 和 block4。