当值为mongodb中其他对象的_id时,无法使用python-eve使用字符串字段进行过滤

时间:2014-01-09 03:44:06

标签: python mongodb flask eve

当我尝试使用python-eve过滤集合时,我遇到了一种奇怪的行为,当我使用“where”参数过滤包含另一个文档的_id作为值的字段时,如果我添加了一个,则不返回任何记录返回记录的字段值后的额外字母/数字没有问题,任何具有_id值的字段都会发生相同的行为。正如我在配置文件中看到的那样,在调用db时,值被转换为$ oid,但我不确定原因 有什么想法吗?

由于 加斯

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": "xxxx@callc"
}

我正在使用运行mongod 2.4.7的mongolab中托管的数据库

以及virtualenv,带有以下“pip freeze”输出

  • 的Cerberus == 0.4.0
  • 伊芙== 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

1 个答案:

答案 0 :(得分:2)

最新的开发版支持query_objectid_as_string。将其设置为True以用于“任务”字段,您应该没问题。有关详细信息,请参阅docs