多维数组的Mongoose模式解决方法

时间:2014-05-05 15:28:33

标签: node.js mongodb multidimensional-array mongoose

我正在编写一个必须为网格保存数据的网络应用。像战列舰一样思考。我希望能够做到这一点:

var block = mongoose.Schema({
  type: Number,
  colour: String
});

var schema = mongoose.Schema({
  grid: [[block]]
});

然而,似乎这是不可能的,因为不支持多维数组。嘘!任何人都可以建议解决这个问题吗?我想要多数组格式的块,所以我可以使用坐标来访问它们。

1 个答案:

答案 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();

然后,对接下来的两个对象block3block4执行相同操作。

相关问题