2017-08-23 9 views
0

pymongoを使用して以下の検索クエリを書くにはどうすればよいですか?このクエリは、dbでうまく動作します。pymongoどこが複雑な関数を持つ節

{$where: function() { 
var deepIterate = function (obj, value) { 
    for (var field in obj) { 
     if (obj[field] == value){ 
      return true; 
     } 
     var found = false; 
     if (typeof obj[field] === 'object') { 
      found = deepIterate(obj[field], value) 
      if (found) { return true; } 
     } 
    } 
    return false; 
}; 
return deepIterate(this, "573c79aef4ef4b9a9523028f") 

}}

答えて

0

あなたは文字列としてJavascriptのコードを渡すことによってPyMongoで$ where句を使用することができます。ここでは完全な例だ、私はトリプル引用符でJavascriptをラップする方法がわかります返信ジェシーため

from pymongo import * 

client = MongoClient() 
db = client.test 

collection = db.collection 
collection.delete_many({}) 
collection.insert_many([ 
    {"x": {"y": {"z": 1}}}, 
    {"x": {"y": {"z": 2}}}, 
]) 

# A new request comes in with address "ip_2", port "port_2", timestamp "3". 
print(collection.find_one({ 
    "$where": """var deepIterate = function (obj, value) { 
    for (var field in obj) { 
     if (obj[field] == value){ 
      return true; 
     } 
     var found = false; 
     if (typeof obj[field] === 'object') { 
      found = deepIterate(obj[field], value) 
      if (found) { return true; } 
     } 
    } 
    return false; 
}; 

return deepIterate(this, 2)"""})) 
+0

おかげで、私は上記を試してみましたが、私はこの、2リターンdeepIterate(の値を「2」に送信する必要があります)。この値を関数変数として取得し、その関数の文としてこのcollection.find_oneを持つ必要があります。 %sを試して値を送信したが、それは役に立たなかった。 – Veena

関連する問題