【问题标题】: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 个对象执行相同操作,block3block4

    【讨论】:

      猜你喜欢
      • 2019-09-15
      • 1970-01-01
      • 2023-03-13
      • 2019-10-30
      • 1970-01-01
      • 2013-10-11
      • 2020-04-22
      • 2016-08-05
      • 2017-04-22
      相关资源
      最近更新 更多