遇到一个非常诡异的问题,可以在《LeanCloud API 在线测试工具》上重现。
数据结构大概是这样的:有一个表是Auction,里边有一个User Pointer类型的字段owner,User有个表示性别的gender字段。
我现在想获取所有owner的gender为male的auction,在《在线测试工具》上填写的where信息如下:
{"owner": {"$inQuery": {"where": {"gender": "male"}, "className": "_User"}}, "promotion": "牵手南山"}
测试返回的数据 {"results": []},但实际上数据库里有一条匹配信息。

我如果将数据里匹配的信息的用户的gender改为female,然后再测试:
{"owner": {"$inQuery": {"where": {"gender": "female"}, "className": "_User"}}, "promotion": "牵手南山"}
测试返回结果又是对的。

经测试,只有一个特定的用户才有这个问题,其他用户的数据都正常。而且我们是先使用js sdk发现这个问题,然后又再通过《在线测试工具》也有这个问题。

可以看实际是有数据的:

但如果加上owner的gender为male的过滤,{"owner": {"$inQuery": {"where": {"gender": "male"}, "className": "_User"}}, "promotion": "牵手南山"},就匹配不到了:

如果将该用户的gender改为其他值,就可以匹配成功,但就male这个值匹配不到,而且就这个用户才有这个问题。

这是根据{"promotion": "牵手南山"}为条件返回的完整数据:
{
"results": [
{
"remark": "很有趣的平台,可以接触接触!",
"updatedAt": "2015-11-08T05:38:13.065Z",
"temp": true,
"orderCount": 1,
"ACL": {
"*": {
"read": true,
"write": true
}
},
"winner": "562b6b9200b0bf3701502265",
"content": "喝咖啡",
"loser": [],
"objectId": "563ede8260b262671e8d6c18",
"m": [
"562b6b9200b0bf3701502265"
],
"hope": "温柔善良、通情达理、性感温和、要孝顺!",
"agreement": true,
"maxPrice": 2,
"createdAt": "2015-11-08T05:32:50.699Z",
"star": true,
"imageUrl": "http://ac-hv94270r.clouddn.com/bdd8ef212feac45e6151",
"status": "ready",
"price": 1,
"promotion": "牵手南山",
"owner": {
"starsign": "天蝎座",
"remark": "孝顺是我的基本,希望最后的你会出现!",
"weixin": "Syp_club",
"updatedAt": "2015-11-11T07:09:41.227Z",
"age": "1988",
"occupation": "汽车服务公司 总经理",
"objectId": "563edbdc00b01b78391a9df7",
"nickname": "Mr.Sun",
"city": "深圳",
"username": "svcrh11nak9tot89f5ddjqdp2",
"agreement": true,
"createdAt": "2015-11-08T05:21:32.324Z",
"className": "_User",
"imageUrl": "http://wx.qlogo.cn/mmopen/z2c3mx2E4eu46MKhB46MNhX6zkicoUyufbdoAErDnwcTSwW9mSPekYE3wibZ5dWZvw6YVJS8eDcJiam7OVaxzE9LWrZlcMicuyMj/0",
"emailVerified": false,
"manager": false,
"__type": "Pointer",
"gender": "male",
"authData": {
"weixin": {
"openid": "",
"access_token": "",
"expiration_in": 7200
}
},
"height": "183",
"signed": true,
"mobilePhoneVerified": false
}
}
]
}