我的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)。
答案 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
。