2 回答

TA貢獻1824條經驗 獲得超5個贊
更建議在應用端做轉換。原因如下:
并不知道find結果有多少條,所以轉換出來的數組不確定有多大。極端情況下會超過16MB;
find結果本來是個游標,要進行這個轉換就必須把游標包含的數據全部讀進內存中,對數據庫性能不好;
實在要做可以考慮用Aggregation,但也不能完全達到你的要求,因為返回的必須是對象,而你要的是數組:
db.coll.aggregate([ {$match: {...}}, //查詢條件 {$group: {_id: null, array: {$push: "$uid"}}} ]);
結果在array
字段中。

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" } ] }
- 2 回答
- 0 關注
- 718 瀏覽
添加回答
舉報