2 回答
TA贡献1824条经验 获得超5个赞
更建议在应用端做转换。原因如下:
并不知道find结果有多少条,所以转换出来的数组不确定有多大。极端情况下会超过16MB;
find结果本来是个游标,要进行这个转换就必须把游标包含的数据全部读进内存中,对数据库性能不好;
实在要做可以考虑用Aggregation,但也不能完全达到你的要求,因为返回的必须是对象,而你要的是数组:
db.coll.aggregate([ {$match: {...}}, //查询条件 {$group: {_id: null, array: {$push: "$uid"}}} ]);
结果在array
字段中。
TA贡献1858条经验 获得超8个赞
只要你的数据库是3.4.4以上的话直接调用$objectToArray 就可以了。
# 数据:
{ "_id" : 2, "item" : "ABC2", dimensions: { l: 50, w: 25, uom: "cm" } }
{ "_id" : 3, "item" : "XYZ1", dimensions: { l: 70, w: 75, uom: "cm" } }
# 查询:
db.inventory.aggregate(
[
{
$project: {
item: 1,
dimensions: { $objectToArray: "$dimensions" }
}
}
]
)
# 结果:
{ "_id" : 2, "item" : "ABC2", "dimensions" : [ { "k" : "l", "v" : 50 }, { "k" : "w", "v" : 25 }, { "k" : "uom", "v" : "cm" } ] }
{ "_id" : 3, "item" : "XYZ1", "dimensions" : [ { "k" : "l", "v" : 70 }, { "k" : "w", "v" : 75 }, { "k" : "uom", "v" : "cm" } ] }
- 2 回答
- 0 关注
- 672 浏览
添加回答
举报