首页 > 解决方案 > Pymongo find() 与“$toString”投影运算符

问题描述

我想查询一个获取_id字符串而不是 ObjectId 的 mongo 对象。

def get_obj():
    query = {} 
    contents = {
        'UniqueId' : True,
        'Name' : True,
        'Address1' : True,
        'id' : {
            "$toString": "$_id"
        }
    }
    return db.get_db().collection.find(query,contents)

当我以这种方式运行它时,我得到以下输出:

pymongo.errors.OperationFailure: Unsupported projection option: id: { $toString: "$_id" }

标签: mongodbpymongo

解决方案


我相信您的问题是您正在使用aggregate函数 ( $toString) 而不进行聚合。

至少有2个选项:

  1. 只需使用pythonstr()方法。
cursor = list(get_obj())
print([str(doc['_id']) for doc in cursor])
  1. 使用聚合
def get_obj():
    contents = [
        {'$project': {
            '_id': {'$toString': '$_id'},
            # other desired fields
        }}
    ]
    return db.get_db().collection.aggregate(contents)


result = list(get_obj())

print([doc for doc in result])

推荐阅读