質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

5414閲覧

phpでmongodbの値からソートして最新を取得する方法

it_solution_lab

総合スコア71

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2015/05/21 02:17

phpでmongoDBにあるデータから

日付・時刻の降順でソートをかけて
条件に一致するデータのうち
最新のデータを取得したいのですが

その記述方法がよくわかりません。

下記の方法では出来ないのですが、
sql文では
select * from logdata WHERE key='$key' ORDER BY lastdate DESC,lasttime DESC
を実行し、その最初の行を取得したいのですが、

サイトのいろんなサンプルを見ても、ちょっとよくわかりませんでした。
insert はできたのですが

条件に一致するデータの更新(update)も記述がよくわかりませんでした。
ご指導ください

<?php //接続 //Mongo $mongo = new Mongo(); //データベース $db = $mongo->selectDB("sampledb"); //コレクション $collection = $db->selectCollection("logdata"); $key = "1234567"; $doc = array( "key" => "$key" ); $res = $collection->findOne( $doc ); $doc2 = array("lastdate">="-1","lasttime">="-1"); $res2 = $collection->sort($doc2); print "res<br>\n"; var_dump ($res); print "res2<br>\n"; var_dump ($res2); ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

orange0190

2015/05/21 02:52

$doc2 = array("lastdate">="-1","lasttime">="-1"); はタイプミス?
it_solution_lab

2015/05/21 03:09

日付と時間で、新しい順に並べる、というつもりの記述です どのように条件を指定すればよいのかわからないため、 とりあえず指定してみましたが、これではNGなのは結果からわかっています。
guest

回答2

0

順番や変数名を入れ替えたりコメント入れたりしたソース
データの更新は'$set'や'$inc'など修正子をキーにして指定するのがミソ

lang

1<?php 2// MongoDBのクライアント作成 3$client = new MongoClient(); 4// データベースに接続 5$database = $client->selectDB('sampledb'); 6// コレクションを指定 7$collection = $database->selectCollection('logdata'); 8// 検索条件(WHERE key = '1234567') 9$where = array('key' => "1234567"); 10// ソート条件を指定する(ORDER BY lastdate DESC, lasttime DESC) 11// ソート条件は-1でDESC, 1でASC 12$order_by = array('lastdate' => -1, 'lasttime' => -1); 13 14// まずは指定条件での検索結果を受け取る 15$cursor = $collection->find($where); 16// 検索結果をソートする 17$cursor->sort($order_by); 18// 最新のデータのみがほしいので1件に結果を絞る 19$cursor->limit(1); 20// カーソルからデータを取得する 21$result = $cursor->next(); 22 23var_dump($result); 24 25// データの更新 26// [SQLで言えば] 27// UPDATE logdata SET name='ABCDEFG' WHERE key = '1234567' 28// 29$set = array('name' => 'ABCDEFG'); 30$collection->update($where, array('$set' => $set));

投稿2015/05/21 06:42

khirose

総合スコア251

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

it_solution_lab

2015/07/08 06:48

$cursor = $collection->find($where); この結果がcursorに入って来ていないようです。 var_dump($cursor) としても object(MongoCursor)#4 (0) { } となります。 検索キーを複数に指定するつもりで、 $where = array('key' => "$key",'myid' => "$myid",'toid' => "$toid" ,'kind' => "$kind" ); としましたが、状況は同じで 複数ではなく、1つだけとして $where = array('key' => "$key" ); としてやってみましたが、結局 結果として var_dump で表示される内容は同じでした。
ara_ta3

2015/08/03 03:38

横から失礼します。 findした結果をそのまま`var_dump` しても要素をみることはできないです。 この時は `iterator_to_array` という関数を使うと配列に変換して見ることが出来ます。 (参考 http://php.net/manual/en/function.iterator-to-array.php ) `var_dump(iterator_to_array($cursor));` で中身を確認できるかと思います。
guest

0

このサイトがわかりやすいんじゃないかなと思います。
PHPでMongoDBを使ってみる


追記

lang

1 //接続 2 //Mongo 3 $mongo = new Mongo(); 4 //データベース 5 $db = $mongo->selectDB("sampledb"); 6 //コレクション 7 $collection = $db->selectCollection("logdata"); 8 9 10 $key = "1234567"; 11 12 $doc = array( "key" => $key ); 13 14 $res = $collection->find( $doc ); 15 16 $doc2 = array("lastdate"=>-1,"lasttime"=>-1); 17 18 $res->sort($doc2); 19 $res->limit(1); 20 21 foreach($res as $id => $res2){ 22 print "res2<br>\n"; 23 var_dump ($res2); 24 }

以上でどうでしょうか?
実は詳しくないので、調べながら考えてみました。
未検証ですので、注意してください。

投稿2015/05/21 02:55

編集2015/05/21 03:29
orange0190

総合スコア1698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

it_solution_lab

2015/05/21 03:10

こちらのサイトを参照した結果、 上記の記述をしたのですが、 検索条件と、並べ替え条件を指定して、値を取得する、という記述が 書かれていないため、よくわからない、というのが現状です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問