1

私はこのクエリを持っています

$collection->find(array('_id' => new MongoId($gameid)), array('players' => 1));

この構造から選択します

var gameSchema = new Schema({
  name : String,
  map : String,
  mode : String,
  playerLimit : Number,
  players : [Player],
  isActive : Boolean
});

それは機能し、選択したゲームのすべてのプレーヤーを選択します。しかし、何らかの理由で_idも返します。

 Array
 (
[_id] => MongoId Object
    (
        [$id] => 506f3c93e0b4791a86000001
    )

[players] => Array
    (
        [0] => Array
            (
                [hero] => Neal, the demon
                [state] => in lobby
                [name] => Test Spiller
            )

    )

)

これにより、2つのループを使用する必要があります。どうすれば、次のように表示できますか。

    array(
        [0] => Array
            (
                [hero] => Neal, the demon
                [state] => in lobby
                [name] => Test Spiller
            )

    )

トラバース。

$collection = new MongoCollection($db, 'games');
$trav = $collection->find(array('_id' => new MongoId($gameid)), array('players' => 1));
foreach($trav as $player) {
4

2 に答える 2

1

私の経験では、フィールドを選択すると、すべてのドライバーが常に_idを返します。また、サブドキュメントを直接選択することはできません。そのため、サブドキュメントを取り出す必要があります。

このようなものが役立つはずです:

function array_pluck($key, $input) { 
  if (is_array($key) || !is_array($input)) return array(); 
  $array = array(); 
  foreach($input as $v) { 
      if(array_key_exists($key, $v)) $array[]=$v[$key]; 
  } 
  return $array; 
}

次に、これを行うことができます:

foreach(array_pluck("players",$trav) as $player){
    ...
}
于 2012-10-05T22:36:15.603 に答える
0

明示的に除外しない限り、通常はMongoDBクエリの一部として_idが返されます。私はPHP構文に精通していませんが、追加してみることができるようです_id => 0

于 2012-10-05T22:23:17.027 に答える