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

时间:2017-04-19 21:18:02

标签: python mongodb pymongo bson

我正在尝试将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())

2 个答案:

答案 0 :(得分:0)

您确实已将转化身份string转换为ObjectId。 由于打印功能会将ObjectId返回到string类型以便正确打印,而不是打印值本身,请尝试打印该类型。

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

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

返回:

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

因此,您可以在要使用ObjectIds的位置使用var1var2

答案 1 :(得分:0)

在直接从str转换为objectid之前,请尝试使用ObjectId.is_valid验证objectid是否为True返回 if ObjectId(session['id']): try: id_object_valid = ObjectId(session['id']) except (InvalidId, TypeError): return False ,以便您可以执行某些操作如:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:id="@+id/activity_kurs__chatroom"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.eitisoft.studentexchangecloud.Schulen.GymnasiumZwieselKlassen.GymnasiumZwieselQ11Kurse.Kurs_Chatroom"
   android:background="@drawable/test1">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/appbar"
    android:fitsSystemWindows="true"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<RelativeLayout
    android:layout_width="match_parent"
    android:id="@+id/relativeLayout"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:layout_height="60dp">

    <EditText
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:ems="10"
        android:id="@+id/editText9"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:hint="Nachricht schreiben"
        android:layout_marginLeft="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:layout_width="wrap_content"
        android:background="@color/colorPrimary"
        android:paddingLeft="8dp"
        android:layout_toStartOf="@+id/imageView" />

    <ImageView
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/buttonsend"
        android:layout_centerVertical="true"
        android:id="@+id/imageView"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"
        android:layout_alignParentEnd="true" />

</RelativeLayout>


    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:id="@+id/listmessage"
        android:layout_below="@+id/appbar"
        android:stackFromBottom="true"
        android:layout_above="@+id/relativeLayout" />