如何在没有循环整个集合的情况下将_id作为ObjectId字符串返回?

时间:2016-11-05 10:21:37

标签: python mongodb flask pymongo

我遇到stringify _id问题。

使用mongo.db.some_collection.find()查询集合后,我得到如下内容:

 [{
    "_id":
        {
           "$oid": "581c0967e14c8b2118a31758"
        },
     "name": "something"
 },
 {
    "_id":
        {
           "$oid": "581c50aae14c8b214a3d2231"
        },
     "name": "something else"
 }]

我希望API响应能够像以下一样简单,以便为前端开发人员提供更多便利。他们不想做item._id.$oid之类的事情来获得实际的身份。

 [{
    "_id": "581c0967e14c8b2118a31758",
    "name": "something"
 },
 {
    "_id": "581c50aae14c8b214a3d2231",
    "name": "something else"
 }]

我不想循环遍历所有结果并操纵每个项目以获得我想要的东西。有没有办法(一个函数?)转换_id而不循环?

我找到了答案here,但建议在插入时操纵_id。我插入时其实并不介意。

1 个答案:

答案 0 :(得分:1)

您可以使用聚合管道中的项目阶段来重塑字段,将返回预期的输出。:

db.test.aggregate([
    {
        $project: 
        {
            name: 1,
            _id: '$_id.oid'
        }
    }
])