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

MongoDB find 怎么输出数组?

MongoDB find 怎么输出数组?

慕无忌1623718 2019-04-19 11:19:54
例如 我find查询结果是[{uid:1},{uid:2}...]怎么才能直接得到[1,2,3...]
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

更建议在应用端做转换。原因如下:

  1. 并不知道find结果有多少条,所以转换出来的数组不确定有多大。极端情况下会超过16MB;

  2. find结果本来是个游标,要进行这个转换就必须把游标包含的数据全部读进内存中,对数据库性能不好;

实在要做可以考虑用Aggregation,但也不能完全达到你的要求,因为返回的必须是对象,而你要的是数组:

db.coll.aggregate([
    {$match: {...}}, //查询条件
    {$group: {_id: null, array: {$push: "$uid"}}}
]);

结果在array字段中。


查看完整回答
反对 回复 2019-05-19
?
猛跑小猪

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" } ] }


查看完整回答
反对 回复 2019-05-19
  • 2 回答
  • 0 关注
  • 643 浏览

添加回答

举报

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