Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查询文档';使用过滤器和选项在PHP MongoDB中创建数组字段_Php_Mongodb_Mongodb Query_Nosql - Fatal编程技术网

查询文档';使用过滤器和选项在PHP MongoDB中创建数组字段

查询文档';使用过滤器和选项在PHP MongoDB中创建数组字段,php,mongodb,mongodb-query,nosql,Php,Mongodb,Mongodb Query,Nosql,我正在使用PHP MongoDB\Driver\Manager,我想通过创建一个MongoDB\Driver\query进行查询 因此,我有以下系列设计: { "_comment": "Board", "_id": "3", "player": "42", "moves": [{ "_id": "1", "piece": "b3rw4", "from_pos": "E2", "to_pos": "E4

我正在使用PHP MongoDB\Driver\Manager,我想通过创建一个MongoDB\Driver\query进行查询

因此,我有以下系列设计:

{
    "_comment": "Board",
    "_id": "3",
    "player": "42",
    "moves": [{
        "_id": "1",
        "piece": "b3rw4",
        "from_pos": "E2",
        "to_pos": "E4"
    }]
}
我如何查询此集合以接收特定玩家的所有棋盘的所有最小移动(id)?这意味着我首先要过滤所有棋盘,只获取具有玩家ID的棋盘。然后我要搜索所有这些棋盘的“移动”字段,其中我需要“移动”字段的最小值(_ID)

我目前有以下问题:

$filter = ['player' => '93'];
$options = [
    'projection' => ['_id' => 0,
                     'moves' => 1]
];
$query = new MongoDB\Driver\Query($filter, $options);
这将导致玩家93找到所有“移动”数组


然后,我如何通过只获取带有min(\u id)的移动来过滤所有这些“移动”字段呢?

好的,所以我找到了答案。我只需要使用聚合管道

以下是给出预期输出的shell命令:

db.boards.aggregate( [
    {
     $match: {'player': '93'}
    },
    {
     $unwind: {path: '$moves'}
    },
    {
     $group:
       {
         _id: '$_id',
         first_move: { $min: '$moves._id' },
         from_pos : { $first: '$moves.from_pos' },
         to_pos: { $first: '$moves.to_pos' }
       }    
    }
])
下面是使用命令和聚合的相应PHP MongoDB代码:

$command = new MongoDB\Driver\Command([
    'aggregate' => 'boards',
    'pipeline' => [
        ['$match' => ['player' => '93']],
        ['$unwind' => '$moves'],
        ['$group' => ['_id' => '$_id',
                      'firstMove' => ['$min' => '$moves._id'],
                      'from_pos' => ['$first' => '$moves.from_pos'],
                      'to_pos' => ['$first' => '$moves.to_pos']
                     ]
        ]
    ],
    'cursor' => new stdClass,
]);

$manager = new MongoDB\Driver\Manager($url);
$cursor = $manager->executeCommand('db', $command);