为了账号安全,请及时绑定邮箱和手机立即绑定

有没有人遇到过这个问题哈!MongoDB find 使用?各位有什么建议?

有没有人遇到过这个问题哈!MongoDB find 使用?各位有什么建议?

撒科打诨 2019-06-09 09:38:18
例如我find查询结果是[{uid:1},{uid:2}...]怎么才能直接得到[1,2,3...]
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

更建议在应用端做转换。原因如下:
并不知道find结果有多少条,所以转换出来的数组不确定有多大。极端情况下会超过16MB;
find结果本来是个游标,要进行这个转换就必须把游标包含的数据全部读进内存中,对数据库性能不好;
实在要做可以考虑用Aggregation,但也不能完全达到你的要求,因为返回的必须是对象,而你要的是数组:
db.coll.aggregate([
{$match:{...}},//查询条件
{$group:{_id:null,array:{$push:"$uid"}}}
]);
结果在array字段中。
                            
查看完整回答
反对 回复 2019-06-09
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

只要你的数据库是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"}]}
                            
查看完整回答
反对 回复 2019-06-09
  • 2 回答
  • 0 关注
  • 347 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信