我的收藏中有很多记录。它们使用二进制 uuid 进行索引:
db.users.find().limit(1);
[{ "_id": ..., "guid": BinData(2,"EAAAANR56IodpE3xhYLtfugc7SY="), otherdata }]
如果我从 CLI 查询,我可以检索记录:
db.users.find({ "guid": BinData(2,"EAAAANR56IodpE3xhYLtfugc7SY=") });
[{ "_id": ..., "guid": BinData(2,"EAAAANR56IodpE3xhYLtfugc7SY="), otherdata }]
如果我想从 PHP 做同样的事情,查询不会返回任何内容:
$client->db->setProfilingLevel(2);
$res = $client->db->users->find(array('guid' => new MongoBinData($bin_data, 2)));
$res->next(); // perform the query
echo $res->count(); // display 0
当然,我已经测试过$bin_data
变量保持正确的值。
如果我查看 mongo 的日志,
Thu Jan 10 18:05:06 [conn1] query db.users query: { guid: BinData } ntoreturn:0 ntoskip:0 nscanned:0 keyUpdates:0 locks(micros) r:14807 nreturned:0 reslen:20 14ms
值为scanned
0 !这意味着它甚至不扫描集合以获取结果?
有什么线索吗?
编辑我已将分析级别设置为 2,它确实改变了任何东西。我可以在日志中看到身份验证,但仍然没有查询。
Edit2添加了日志行。