3

次の構造を持つ mongoDB ドキュメントがいくつかあります。

[_id] => MongoId Object (
  [$id] => 50664339b3e7a7cf1c000001
)
[uid] => 1
  [name] => Alice
  [words] => 1
  [formatIds] => Array (
        [0] => 1
        [1] => 4
  )

私がやりたいことは、formatIds[] の値が 1 であるすべてのドキュメントを見つけることです。それを実現することは可能だと思います。PHPでどうすればできますか?

アップデート

助けてくれてありがとう。今はうまくいきます。これが私が検索を書いた方法です、

$id=$_POST['id'];
$query = array('formatIds'=> "{$id}" );
$result = $stations_table->find($query); //where $stations_table = $db->stations;
4

3 に答える 3

3

MongoDB は、 docsに従って、配列値に対するクエリを標準値に対するクエリと同じ方法で扱います。

クエリは機能するarray('formatIds' => 1)はずです。

于 2012-10-03T17:05:11.777 に答える
1

MongoDBは、配列を同じキーの複数の値に「変換」します。

$ cursor = $ mongo-> base-> collection-> find(array('formatIds' => 1));

mongoオブジェクトを正しく定義し、ベース/コレクション文字列を設定します。

于 2012-10-03T08:49:56.267 に答える
0

クエリに一致するドキュメントまたは値のみが必要かどうかによって異なります。

配列全体を取り出してクライアント側で検索することを気にしない場合は、もちろん次を使用できます。

$c = $db->col->find(array('formatIds' => 1))

MongoDB の 1 次元配列は 1 つのフィールドのように検索できるためです。

ただし、上記のクエリはすべてを選択するため、クエリに一致するものだけを取得する必要があります。

$db->command(array(
    'aggregate' => 'col',
    'pipeline' => array(
        array('$unwind' => "$formatIds"),
        array('$match' => array('formatIds' => 1)),
        array('$group' => array(
            '_id' => '$_id', 
            'formats' => array('$push' => '$formatIds'))
        )
    )
)

そのようなものを使用してください。

これにより、ドキュメントの結果と、配列内の値の行のみを含むフィールドが_id得られます。_idformats1

于 2012-10-03T10:27:44.083 に答える