2017-06-13 1 views
0

Ich versuche, eine Datenbank mit Informationen zu kratzen, hatte aber Probleme beim Abfragen. Hier ist der grundlegende Datenbank-Setup in MongoDB:Übergeben einer String-Variable in Pymongo Abfrage

{ 
    "ID": 346, 
    "data": [ 
    { 
     "number": "23", 
     "name": "Winnie" 
    }, 
    { 
     "number": "12", 
     "name": "Finn" 
    }, 
    { 
     "number": "99", 
     "name": "Todd" 
    } 
    ] 
} 


{ 
    "ID": 346, 
    "data": [ 
    { 
     "number": "12", 
     "name": "Ram" 
    }, 
    { 
     "number": "34", 
     "name": "Greg" 
    }, 
    { 
     "number": "155", 
     "name": "Arnie" 
    } 
    ] 
} 

relevant Python-Code ist unten:

import pymongo 
import json 
import io 
import sys 
from bson.json_util import dumps 
from pymongo import MongoClient 
stringArr = ['"23"', '"12"', '"155"'] 
for x in range(0, len(stringArr)) 
print(collection.find({"data.number" : stringArr[x]}).count()) 

Als ich collection.find({"data.number" : "23"}).count() eingeben kehre ich die richtige Anzahl der Einträge, die "23" als die Zahl in Daten haben, also nehme ich an, dass meine Syntax für die Suche in Python versaut ist, was wahrscheinlich damit zu tun hat, dass die Variable eine Zeichenkette ist, aber ich bin ziemlich unerfahren mit MongoDB, ganz zu schweigen von PyMongo. Jeder Vorschlag würde sehr geschätzt werden!

+2

Warum haben Sie 155, warum nicht nur "155"? – depperm

+0

das hat funktioniert, danke !!!! –

Antwort

1

$ elemMatch Der Operator wird verwendet, um Werte in einem Array-Feld zu finden, das zum BSON-Dokument gehört.

Gemäß der oben genannten Beschreibung versuchen Sie bitte, die folgende rohe Abfrage in der MongoDB-Shell auszuführen.

db.collection.find({ 
    data: { 
     $elemMatch: { 
      number: { 
       $in: ["23", "12", "155"] 
      } 
     } 
    } 
}) 
Verwandte Themen