问题描述
例如我要获得所有的name字段集合[’bob’, ’ahn’, ’abc’],该怎么写sql
{ '_id' : 2, 'name' : 'bob', 'age' : 42, 'type' : 1, 'status' : 'A', 'finished' : [ 11, 25 ], 'badges' : [ 'green' ]}{ '_id' : 3, 'name' : 'ahn', 'age' : 22, 'type' : 2, 'status' : 'A', 'finished' : [ 6 ], 'badges' : [ 'blue', 'red' ]}{ '_id' : 6, 'name' : 'abc', 'age' : 43, 'type' : 1, 'status' : 'A', 'finished' : [ 18, 12 ], 'badges' : [ 'black', 'blue' ]}
问题解答
回答1:不管通过何种方式,数据库给你的结果只会是:
[{name: ’bob’},{name: ’ahn’},{name: ’abc’}]
如果是在shell下面,可以用JS脚本进行转换:
var cursor = db.coll.find({}, {_id: 0, name: 1});var result = cursor.map(function(doc) { return doc.name;});
这里用到cursor.map方法。在不同的驱动中应该都有不同的实现。但这部分工作实际上不是数据库为你完成的,而是驱动在app端做的转换。数据库是紧要资源,在不影响性能的前提下应该尽可能把消耗资源的行为都放到应用端。因为相比数据库,应用的水平扩展要容易并且成本更低。