无法使用python-eve使用字符串字段进行过滤当值为其他对象的_id时,mongodb
问题描述:
当我尝试使用python-eve过滤集合时出现奇怪的行为,当我使用“where “参数是包含另一个文档的_id作为值的字段,没有记录返回,如果我在字段值之后添加一个额外的字母/数字记录返回时没有问题,则具有_id作为值的任何字段都会发生相同的行为。正如我在配置文件中看到的那样,在调用db时,值被转换为$ oid,但我不确定为什么 有什么想法?无法使用python-eve使用字符串字段进行过滤当值为其他对象的_id时,mongodb
感谢 加斯顿
URL
http://127.0.0.1:5000/contacts?where={"task":"52cdad82a54d7506bc6f9a12"}
返回的数据
<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的记录
{
"_id": {
"$oid": "52cdc33ca54d75085073e7ef"
},
"timestamp": {
"$date": "2014-01-08T21:29:32.603Z"
},
"task": "52cdad82a54d7506bc6f9a12",
"contact_uuid": "43acc81a-bdd2-42dd-bc0f-8279ddd497f4",
"started_by": "admin"
}
MongoDB的配置文件输出
{
"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": "[email protected]"
}
我使用mongolab运行托管的数据库的mongod 2.4.7
而且virtualenv中,与下面的 “画中画冻结” 输出
- Cerberus == 0.4.0
- Eve == 0.2 个
- 活动== 0.2.0
- 瓶== 0.10.1
- 瓶校长== 0.4.0
- 烧瓶PyMongo == 0.3.0
- 烧瓶上传== 0.1.3
- 烧瓶WTF == 0.9.3
- 的Jinja2 == 2.7
- MarkupSafe == 0.18
- WTForms == 1.0.5
- WERKZEUG == 0.9.4
- 信号灯== 1.3
- 烧瓶-mongoengine == 0.7.0
- itsdangerous == 0.22
- mongoengine == 0.8.6
- passlib == 1.6.1
- PY == 1.4。 18
- pymongo == 2.6.3
- pytest == 2.4.2
- 请求== 2.1.0
- simplejson == 3.3.0
- wsgiref == 0.1。2
我搬到了最新的开发版本,并且修正了这个问题,在配置中添加了**“query_objectid_as_string”:True **选项 –