You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB投影操作符能否将查询结果转为对象而非数组?

MongoDB查询结果转为以_id为键的对象方案
  • MongoDB原生层面没有直接操作能让find+投影后直接返回以_id为键、选中字段为值的对象,默认find操作返回的是文档数组。
  • 在Swift/Vapor中,可以通过flatten配合Dictionary(uniqueKeysWithValues:)实现这个转换。

示例

首先是MongoDB的查询语句(用于获取指定字段的文档数组):

db.bios.find( { }, { _id: 1, name: 1, contribs: 1 } )

然后是Swift/Vapor中的转换代码:

// 假设已通过MongoDB驱动获取查询结果数组,类型为[BSONDocument]
let documents: [BSONDocument] = ...
// 转换为以_id为键的字典
do {
    let idKeyedDict = try Dictionary(uniqueKeysWithValues: documents.map { doc in
        guard let id = doc["_id"] as? BSONObjectID else {
            throw Abort(.internalServerError, reason: "缺少无效的_id字段")
        }
        // 提取需要的字段构造值对象
        let name = doc["name"] as? String
        let contribs = doc["contribs"] as? [String]
        let value = ["name": name, "contribs": contribs]
        return (id, value)
    })
    // 使用转换后的字典
    print(idKeyedDict)
} catch {
    print("转换失败:\(error)")
}

注意:使用Dictionary(uniqueKeysWithValues:)时需确保所有文档的_id唯一,否则会抛出重复键错误。

内容的提问来源于stack exchange,提问作者János

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:45:48