我正在编写一个必须为网格保存数据的网络应用。像战列舰一样思考。我希望能够做到这一点:
var block = mongoose.Schema({
type: Number,
colour: String
});
var schema = mongoose.Schema({
grid: [[block]]
});
然而,似乎这是不可能的,因为不支持多维数组。嘘!任何人都可以建议解决这个问题吗?我想要多数组格式的块,所以我可以使用坐标来访问它们。
答案 0 :(得分:1)
可能的解决方法是使用Schema.Types.Mixed
。我们假设你需要创建一个2x2的block
个对象数组(我还没有测试过这段代码):
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' block'对象(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();
然后,对接下来的两个对象block3
和block4
执行相同操作。