コレクションにはたくさんのレコードがあります。それらはバイナリ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
変数が正しい値を保持することをテストしました。
モンゴのログを見ると、
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ログ行を追加しました。