PyMongo:ObjectId() 打印字符串而不是对象

PyMongo: ObjectId() prints string instead of Object

我正在尝试将 id 字符串转换为 ObjectId()

我有以下导入:

from pymongo import MongoClient
import pymongo
from bson.objectid import ObjectId

如果我打印:

print(ObjectId(session['id']))
print(ObjectId())

我得到以下信息:

58a09f4255c205690833f9dd
58f7d1606cb710c54a14ae82

预计:

ObjectId("58a09f4255c205690833f9dd")
ObjectId("58f7d1606cb710c54a14ae82")

仅供参考:

pymongo==3.4.0
bson==0.4.7

我试过了(没有成功):

import bson
print(bson.ObjectId(session['id']))
print(bson.ObjectId())

您确实已经将您的 ID string 转换为 ObjectId。 作为打印函数 returns 你的 ObjectIdstring 类型为了正确打印,而不是打印值本身,尝试打印类型。

var1 = ObjectId(session['id'])
var2 = ObjectId()

print(var1)
print(var2)
print(type(var1))
print(type(var2))

Returns:

58a09f4255c205690833f9dd
58f7d1606cb710c54a14ae82
<class 'bson.objectid.ObjectId'>
<class 'bson.objectid.ObjectId'>

所以您可以在您想要使用 ObjectId 的地方使用 var1var2

在直接从 str 转换为 objectid 之前尝试使用 ObjectId.is_valid 验证是否是 objectid return [=15= 的验证字符串] 所以你可以这样做:

  if ObjectId(session['id']):
      try:
          id_object_valid = ObjectId(session['id'])
      except (InvalidId, TypeError):
          return False