Mongoose 查询返回带有空数组的嵌套文档
Posted
技术标签:
【中文标题】Mongoose 查询返回带有空数组的嵌套文档【英文标题】:Mongoose query returning nested document with empty array 【发布时间】:2015-12-19 21:13:07 【问题描述】:我有一个用于 geoJSON 多边形对象的猫鼬模式,结构如下:
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"
]
这和猫鼬有关吗?我该如何解决?
【问题讨论】:
【参考方案1】:事实证明,mongoose 中存在嵌套数组的错误。它已在 4..3 中修复,您可以在此处阅读更多信息 https://github.com/Automattic/mongoose/issues/1361
直到那时我发现通过使用 Model.collection 我可以使用核心 mongo 驱动程序,它对嵌套数组没有任何问题
【讨论】:
【参考方案2】:是不是因为每个坐标中有 2 个数字而架构只指定了一个? IOW,应该
coordinates:
type: [[[Number]]]
阅读
coordinates:
type: [[[Number, Number]]]
【讨论】:
模式指定了一个数字数组,因此第三个内部数组 [Number] 看起来像 [1, 2] 是的,这就是我提出问题的原因,我猜这不应该是答案的形式。 [1,2] 不是数字。您的示例数据在那里显示了 2 个逗号分隔的数字,但您的方案仅指定了一个数字。 模式指定了一个大小为 n 的数字数组。 [], [1], [1, ... , n] 都是有效的例子以上是关于Mongoose 查询返回带有空数组的嵌套文档的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose - 使用 find() 查询文档,其中嵌套数组值的总和在一定范围内
mongoose - 如何使用带有请求参数数组的 $in 进行 .find()现在它只返回空数组
选择带有restangular或angular的嵌套数组元素