Pymongo find()和“ $ toString”投影运算符

时间:2019-07-22 18:39:46

标签: mongodb pymongo

我想查询将_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" }

1 个答案:

答案 0 :(得分:0)

我认为您的问题是您正在使用aggregate函数($toString)而不进行汇总。

至少有两个选项:

  1. 只需使用python str()方法。
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])