2016-10-07 8 views
0

にNumberLongの長さを決定します私はいくつかはNumberLong値が含まれている、私のMongoDBのコレクション内の一部の文書を持っているのPython

{ "_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のコードにインポートするとスプリットを使用して各番号を抽出しています(もしI電話機に複数の番号セットがあるかどうかなど)、リストに直接追加することができます。

しかし、私は長さだから私はこれを使用してみました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値を 'pass'ingします。

+0

[link](http://stackoverflow.com/questions/23490798/pymongo-find-if-value-has-a-datatype-of-numberlong) – Jeril

+0

こんにちは@Jeril。私はそのリンクをチェックしましたが、適切な結論に達することができませんでした。 – Anubhav

+0

文書の構造を変更し、 'phone'フィールドを配列にする必要があります – styvane

答えて

-1

あなたのユースケースに応じて、値が含まphoneを渡す「スキップ」でしょう$type

client = MongoClient() 
db = client.database 
collection = db.collection 

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

を利用した文字列であるだけリターンフィールドphoneに、クエリにフィルタを追加することができますいずれかをNumberLongの値を関数に追加します。

phoneを別の方法でNumberLongの値で処理したい場合は、Python isinstanceを利用できます。例えば以下を参照してください:あなたは、Python 2を使用している場合、あなたはlongを検出する必要が

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 3を使用している場合は、intを検出するだけで済みます。

+0

なぜこの答えが下位投票を受け取ったのか分かりません。それは質問に対する完全で実用的な答えです。上のコメントのリンクされたポストは、フィルタリングの解決策を示唆することさえなく、a)mongoシェルの番号とPythonの長い区別、およびb)$ typeの使用を暗示します。 –