Facebook Graph APIにアクセスして、フィード(Facebookウォール)の最新の投稿を表すJSONオブジェクトを取得しました。次に、PHP Mongo Driverを使用して、フィードと呼ばれるMongoDBコレクションに保存しました。
//$post['feed']['data'] contains the Facebook JSON object of wall posts
//create a mongo instance
$mongo = new Mongo();
//access the feeds collection
$feeds = $mongo->changeup->feeds;
//dump the feed right into mongo
$feeds->insert($post['feed']['data']);
これは、mongoに配置されたオブジェクト全体を読み戻した後の配列の1つです。
1つだけを示していますが、さらにいくつかのインデックスが付けられ、次は[1] => Array()などです... [story]フィールドが含まれているため、構造が異なるものもあります。その他には[メッセージ]フィールドが含まれ、一部には両方が含まれます。
Query:
$cursor = $feeds->find();
foreach ( $cursor as $feed ) {
print_r($feed);
}
Result:
[0] => Array
(
[id] => 505212695_10150696450097696
[from] => Array
(
[name] => John Doe
[id] => 505212695
)
[story] => "Text of a story I posted on my wall..."
[story_tags] => Array
(
[38] => Array
(
[0] => Array
(
[id] => 15212444
[name] => John Doe
[offset] => 38
[length] => 10
[type] => user
)
)
)
[type] => status
[application] => Array
(
[name] => Share_bookmarklet
[id] => 5085647995
)
[created_time] => 2012-04-04T05:51:21+0000
[updated_time] => 2012-04-04T05:51:21+0000
[comments] => Array
(
[count] => 0
)
)
問題は、コレクション全体を検索するだけではなく、[message]フィールドと[story]フィールドを含む配列のみを検索し、その内容だけを検索することです。
2レベルの深さのサブセットを受信しようとしています。
//this works, however, I'm only able to get the 0 array
$cursor = $feeds->find( array(), array('0.story' => true) );
すべての配列でフィルタリングするにはどうすればよいですか?
最終結果を次のようにしたいと思います。
Array
(
[_id] => MongoId Object
(
[$id] => 4f7db4dd6434e64959000000
)
[0] => Array
(
[story] => "Text of a story I posted on my wall..."
)
[1] => Array
(
[story] => "Text of a story I posted on my wall..."
)
[2] => Array
(
[story] => "Text of a story I posted on my wall..."
[message] => "In this case message text exists as well..."
)
[3] => Array
(
[message] => "Text of a message I posted on my wall..."
)
etc...
)