次のドキュメント構造があります。
"messages": {
"_id" : ObjectId("515a4de9c1a3c09c19000001"),
"author" : "50fd0d38c1a3c04c27000000",recipient" : "5159a292c1a3c01d5b000005",
"conversation" : [
{
"author" : "50fd0d38c1a3c04c27000000",
"date" : ISODate("2013-04-02T03:18:01.204Z"),
"message" : "hello test",
"read" : false
},
{
"message" : "reply test",
"date" : ISODate("2013-04-02T03:36:57.444Z"),
"author" : "5159a292c1a3c01d5b000005",
"read" : true
}....
conversation.read が false で、未読メッセージの作成者 (conversation.author) が会話を開始した人ではない会話メッセージの総数を取得することは可能ですか?
現在、conversations.read が false であるドキュメントを見つけてから、PHP でそれらをループして conversations.author フィールドを確認しています。これは機能しますが、大量のデータを取得すると速度が低下するのではないかと心配しています。
PHP MongoDB ドライバーを使用しています。
私はこれを試しました..
$unread_conversations = $db->messages->find(
array(
'conversation.read'=>false
'conversation.author'=>array('$ne'=>$_SESSION['account']['_id']->__toString())
));
しかし、作者ではなく、読まれていないメッセージが欲しいので、それはうまくいきません。