2017-08-23 6 views
0

Comment écrire la requête de recherche ci-dessous en utilisant pymongo? Cette requête fonctionne bien pour moi dans le db.pymongo where clause avec une fonction complexe

{$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") 

}}

Répondre

0

Vous pouvez utiliser $ ou clauses PyMongo en passant le code Javascript comme une chaîne. Voici un exemple complet, notez comment j'Enroulez le Javascript dans triple guillemets:

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

Merci pour la réponse Jesse, j'ai essayé ci-dessus, mais je dois envoyer la valeur « 2 » en retour deepIterate (cela, 2). Je reçois cette valeur en tant que variable de fonction et j'ai besoin de cette collection.find_one comme une déclaration dans cette fonction. Essayé% s et l'envoi de la valeur, cela n'a pas aidé. – Veena