Mongoose查询返回带有空数组的嵌套文档

时间:2015-09-22 18:43:54

标签: node.js mongodb mongoose

我有一个用于geoJSON多边形对象的mongoose模式,结构如下:

var polygonZoneSchema = new mongoose.Schema({
    location: {
        'type': {
            type: String,
            enum: "Polygon",
            default: "Polygon"
        },
        coordinates: {
            type: [[[Number]]]
        }
    },
    zoneType: ObjectId,
    riskiness: {
        type: Number,
        default: 0
    }
});

在我的控制器中,我有一个列出所有多边形的函数:

polyZone.find({}).exec(function (err, collections) {
        console.log(collections[0].location.coordinates);
        if (err) {
            res.status(400);
            return res.send({reason: err.toString()});
        }
        res.send(collections);
    });

通过mongo命令行检查我的数据库时,该集合包含:

{
    "_id": ObjectId("55fb6e7ab228f7343367116d"),
    "location": {
        "type": "Polygon",
        "coordinates": [
            [
                [0, 0],
                [0, 1],
                [1, 1],
                [1, 0],
                [0, 0]
            ]
        ]
    }
} {
    "_id": ObjectId("55fb6e7ab228f7343367116e"),
    "location": {
        "type": "Polygon",
        "coordinates": [
            [
                [1, 1],
                [1, 2],
                [2, 2],
                [2, 1],
                [1, 1]
            ]
        ]
    }
}

但是,当使用我的控制器功能时,返回的对象有一个空坐标数组:

[
  {
    "_id": "55fb6e7ab228f7343367116d",
    "riskiness": 0,
    "location": {
      "coordinates": [],
      "type": "Polygon"
    }
  },
  {
    "_id": "55fb6e7ab228f7343367116e",
    "riskiness": 0,
    "location": {
      "coordinates": [],
      "type": "Polygon"
    }
  }
]

这与猫鼬有关吗?我该如何解决?

2 个答案:

答案 0 :(得分:0)

是因为每个坐标中有2个数字,而模式只指定一个?我应该

coordinates: {
        type: [[[Number]]]
    }

阅读

coordinates: {
            type: [[[Number, Number]]]
        }

答案 1 :(得分:0)

事实证明,mongoose中存在嵌套数组的错误。它已被插入固定在4..3您可以在这里阅读更多相关信息https://github.com/Automattic/mongoose/issues/1361

在那之前我发现通过使用Model.collection我可以使用核心mongo驱动程序,它与嵌套数组没有任何问题