在Python中确定NumberLong的长度

时间:2016-10-07 06:01:29

标签: python mongodb pymongo

我的MongoDB集合中有一些文档,其中一些文档包含NumberLong值:

{ "_id" : ObjectId("57e4d18df4733211b613f199"), "parentid" : "P1000016", "phone" : NumberLong("9819733299") }
{ "_id" : ObjectId("57e4d18df4733211b613f19a"), "parentid" : "P1000014", "phone" : "24306574|9920599404||9920840077|865" }
{ "_id" : ObjectId("57e4d18df4733211b613f19b"), "parentid" : "P1000017", "phone" : "25821154|25821188|" }

我正在将它们导入我的python代码并使用split提取每个数字(如果我在手机中有多个数字集)或其他方式,直接附加到列表中。

但我只希望列表长度大于6的那些数字。

所以我尝试使用它:

#Initializing MongoDB client
client = MongoClient()

#Connection
db = client.mumbai
collection = db.mumbaiLive

for post in collection.find():
    shops.append(post) 

for shop in shops:
    phones = shop["phone"].split("|")
    for eachPhone in phones:
        if (len(eachPhone) < 6):
            pass

在遇到NumberLong值之前一切正常。 当我表演时

print "len = ", len(eachPhone),我明白了

len =

我甚至尝试将其转换为字符串,但结果相同。

我想要的:我想跳过使用长度检查或任何其他方法传递NumberLong值(比如确定值是否为NumberLong)。

1 个答案:

答案 0 :(得分:-1)

根据您的使用情况,您可以在查询中添加过滤器,仅使用$type

返回值为字符串的字段phone
client = MongoClient()
db = client.database
collection = db.collection

for document in collection.find({"phone":{"$type":"string"}}):
    print document

哪个会跳过&#39;将包含phone值的NumberLong传递给您的函数。

或者,如果您希望以不同的方式处理phone NumberLong值,则可以使用Python isinstance。请参阅下面的示例:

for doc in collection.find():
    if isinstance(doc["phones"], long):
        print("Number of digits: %s" % len(str(doc["phones"])))
    else:
        print("Number is not NumberLong")

如果您使用的是Python 2,则必须检测long。如果您使用的是Python 3,则只能检测int