Mit Python-Eve kann nicht mithilfe eines Zeichenfolgenfelds gefiltert werden, wenn der Wert die _id für ein anderes Objekt in Mongodb ist
Frage
Ich erlebe ein seltsames Verhalten, wenn ich versuche, eine Sammlung mit Python-Eve zu filtern. Wenn ich mit dem Parameter „where“ ein Feld filtere, das die _id eines anderen Dokuments als Wert enthält, wird kein Datensatz zurückgegeben, wenn ich einen zusätzlichen Buchstaben hinzufüge. Wenn nach dem Feldwert eine Zahl angegeben wird, wird der Datensatz ohne Probleme zurückgegeben. Das gleiche Verhalten tritt bei jedem Feld auf, das eine _id als Wert hat.Wie ich im Profil sehe, sieht der Wert beim Aufrufen der DB in ein $ oid um, aber ich bin mir nicht sicher, warum eine Idee?
Danke Gaston
URL
http://127.0.0.1:5000/contacts?where={"task":"52cdad82a54d7506bc6f9a12"}
Zurückgegebene Daten
<resource href="/contacts" title="contacts">
<link rel="parent" href="" title="home"/>
</resource>
Settings.py
contacts= {
'resource_methods': ['GET', 'POST'],
'schema': {
"timestamp": {
'type': 'datetime',
},
"task": {
'type': 'string'
},
"contact_uuid": {
'type': 'string'
},
"started_by": {
'type': 'string'
},
}
}
MongoDB-Datensatz
{
"_id": {
"$oid": "52cdc33ca54d75085073e7ef"
},
"timestamp": {
"$date": "2014-01-08T21:29:32.603Z"
},
"task": "52cdad82a54d7506bc6f9a12",
"contact_uuid": "43acc81a-bdd2-42dd-bc0f-8279ddd497f4",
"started_by": "admin"
}
MongoDB-Profilausgabe
{
"op": "query",
"ns": "callc.contacts",
"query": {
"task": {
"$oid": "52cdad82a54d7506bc6f9a16"
}
},
"ntoreturn": 10,
"ntoskip": 0,
"nscanned": 9,
"keyUpdates": 0,
"numYield": 0,
"lockStats": {
"timeLockedMicros": {
"r": 172,
"w": 0
},
"timeAcquiringMicros": {
"r": 4,
"w": 4
}
},
"nreturned": 0,
"responseLength": 20,
"millis": 0,
"ts": {
"$date": "2014-01-09T04:04:31.578Z"
},
"client": "XXX.17.153.XXX",
"allUsers": [
{
"user": "xxxxx",
"userSource": "callc"
}
],
"user": "xxxx@callc"
}
Ich verwende eine in Mongolab gehostete Datenbank mit Mongod 2.4.7
Und virtualenv mit der folgenden „pip freeze“-Ausgabe
- Cerberus==0.4.0
- Eva==0,2
- Ereignisse==0.2.0
- Kolben==0,10,1
- Flaschenprinzip==0.4.0
- Flask-PyMongo==0.3.0
- Flask-Uploads==0.1.3
- Kolben-WTF==0,9,3
- Jinja2==2.7
- MarkupSafe==0,18
- WTForms==1.0.5
- Werkzeug==0.9.4
- Blinker==1.3
- flask-mongoengine==0.7.0
- Es ist gefährlich == 0,22
- mongoengine==0.8.6
- passlib==1.6.1
- py==1.4.18
- pymongo==2.6.3
- pytest==2.4.2
- Anfragen==2.1.0
- simplejson==3.3.0
- wsgiref==0.1.2
Lösung
Die neueste Entwicklerversion unterstützt query_objectid_as_string
.Stellen Sie es ein True
für Ihr „Aufgaben“-Feld und es sollte Ihnen gut gehen.Sehen Dokumente für Details.