2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
更建議在應(yīng)用端做轉(zhuǎn)換。原因如下:
并不知道find結(jié)果有多少條,所以轉(zhuǎn)換出來的數(shù)組不確定有多大。極端情況下會(huì)超過16MB;
find結(jié)果本來是個(gè)游標(biāo),要進(jìn)行這個(gè)轉(zhuǎn)換就必須把游標(biāo)包含的數(shù)據(jù)全部讀進(jìn)內(nèi)存中,對(duì)數(shù)據(jù)庫(kù)性能不好;
實(shí)在要做可以考慮用Aggregation,但也不能完全達(dá)到你的要求,因?yàn)榉祷氐谋仨毷菍?duì)象,而你要的是數(shù)組:
db.coll.aggregate([ {$match: {...}}, //查詢條件 {$group: {_id: null, array: {$push: "$uid"}}} ]);
結(jié)果在array
字段中。

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
只要你的數(shù)據(jù)庫(kù)是3.4.4以上的話直接調(diào)用$objectToArray 就可以了。
# 數(shù)據(jù):
{ "_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" }
}
}
]
)
# 結(jié)果:
{ "_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 關(guān)注
- 728 瀏覽
添加回答
舉報(bào)