2

特定の列で特定のエントリを検索し、その列にそのエントリがあるすべてのドキュメントを返すプロジェクトがあります。その入力フィールドが空の場合にエラーが発生することを除いて、ほぼ完全に機能します。以下に説明してみましょう。

私のDB:

A|B|C|D
1|1|5|5
2|1| |6
3|2|7|7
4|2|8|8

私のPHP:

$query = array( "B" => 1);
$cursor = $collection->find( $query );

foreach ($cursor as $obj) {
    echo $obj["A"] . $obj["B"] . $obj["C"]  .$obj["D"] . "<br />";
}

私の出力は次のとおりです。

1155
21Notice: Undefined index: C6

エラーを出さないようにするにはどうすればよいですか。空のフィールドとして扱ってください。これが一般的な問題であるかどうかはわかりませんが、PHPはまだ初めてで、MongoDBは非常に初めてです。

4

2 に答える 2

2

isset() を使用して、キーを使用してインデックスを作成する前に、キーが配列に存在するかどうかを確認します

foreach ($cursor as $obj) {
    echo $obj["A"] . $obj["B"]. (isset($obj["C"]) ? $obj["C"] : '' ) .$obj["D"]."<br />";
   //It will replace each blank with an ''
    }
于 2012-05-09T08:09:59.633 に答える
0

それはmongodbとは何の関係もないと思います。柔軟なドキュメント スキーマのしくみです。C特定のドキュメントにキーが存在しないため、フィールドは返されません。

PHPの経験はありません。ただし、特定のドキュメントに存在しないキー「C」にアクセスしようとしているため、php がエラーをスローすることは確かです。

ODM しかし、いくつかの(オブジェクト ドキュメント マッパー)を使用すれば、これらの問題は簡単に解決できると思います。フィールドのデータ型に基づいてデフォルト値を割り当てることで問題を解決します。

それが役に立てば幸い

于 2012-05-09T08:21:24.763 に答える