0

例如 我find查询结果是[{uid:1},{uid:2}...]
怎么才能直接得到[1,2,3...]

murphyy 390
5 天前提问
2 个回答
0

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

  1. 并不知道find结果有多少条,所以转换出来的数组不确定有多大。极端情况下会超过16MB;
  2. find结果本来是个游标,要进行这个转换就必须把游标包含的数据全部读进内存中,对数据库性能不好;

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

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

结果在array字段中。

0

只要你的数据库是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" } ] }

撰写答案

推广链接