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

MasterEder7

我正在使用PHP MongoDB \ Driver \ Manager,并且想通过创建MongoDB \ Driver \ Query进行查询。

所以我有以下收集设计:

{
    "_comment": "Board",
    "_id": "3",
    "player": "42",
    "moves": [{
        "_id": "1",
        "piece": "b3rw4",
        "from_pos": "E2",
        "to_pos": "E4"
    }]
}

我如何查询该集合以接收特定玩家的所有棋盘的所有带有min(id)的棋步?这意味着我首先要过滤所有棋盘,仅获得具有玩家ID的棋盘。然后,我想搜索所有这些板的“动作”字段,在这里我想要那个“动作”字段的min(_id)。

我目前有这个查询:

$filter = ['player' => '93'];
$options = [
    'projection' => ['_id' => 0,
                     'moves' => 1]
];
$query = new MongoDB\Driver\Query($filter, $options);

这导致玩家93查找所有“移动”数组。

然后,如何仅通过使用min(_id)获取移动来过滤所有这些“移动”字段?

MasterEder7

好的,我知道了。我只是不得不使用聚合管道。

这是给出预期输出的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' }
       }    
    }
])

这是使用Command和gregation的相应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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用过滤器和排序将元素放在数组的开头-javascript

JavaScript使用过滤器和循环从数组中删除多个值

在Angular 4中使用过滤器管道

MongoDB文档中的过滤器数组

Java 8使用过滤器选项在嵌套列表中执行求和运算

lodash-使用过滤器对象数组的过滤器功能

DT和Shiny:使用过滤器格式化数据表中的数字

集合的每个文档中的MongoDB过滤器数组字段

如何使用过滤器从列表中查询?

如何使用过滤器选项查询API

SPARQL:在查询中使用过滤器

如何使用过滤器从ouchdb中删除文档?

无法使用过滤器过滤多个字段

在对象数组和对象的Div上使用过滤器

MongoDb使用过滤器匹配列表

无法使用过滤器获取ManytoMany字段的列表

在dplyr(版本> 1.0.0)中使用过滤器,其中字段和值都在变量中

使用过滤器返回类中的内容和类本身

如何使用过滤器设置过滤数组?

Elasticsearch:使用过滤器和 constant_score 优化查询?

使用过滤器功能搜索连接数组

如何使用过滤器更改原始数组?

Mongodb 使用过滤器查找文档

Angular 9 管道变换数组,使用过滤器和过滤器函数返回可观察值

使用和不使用过滤器在熊猫中添加列

无法使用过滤器删除输入数组

如何使用过滤器和 groupBy 在 Scala 和 Quill 中表达此 SQL 查询?

如何在使用过滤器和包含在柏树中时使用变量

如何从嵌套数组中获取字段和值并查询它们以在 mongodb 中查找文档?