我有这个查询
$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
)
)
)
这迫使我使用两个循环,我怎样才能使它看起来像
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) {
答案 0 :(得分: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){
...
}
答案 1 :(得分:0)
除非明确排除,否则通常会将_id作为MongoDB查询的一部分返回。我不熟悉PHP语法,但看起来您可以尝试添加_id => 0