1

在 php 中使用 withlimit和in获取 mongo 文档的内部数组。skip

$db->users->findOne(array('_id' => new MongoId('5045fa0213cfcdfc06000008')));

上面的查询会给我下面的 mongo 数组

[_id] => MongoId Object (
    [$id] => 5045fa0213cfcdfc06000008
)
[items] => Array (
    [0] => 13
    [1] => 4
    [2] => 3
    [3] => 7
    [4] => 10
    [5] => 11
    [6] => 28
    [7] => 54
    [8] => 31
    [9] => 33
    [10] => 37
    [11] => 12
)

是否可以与上面的mongo doc一起使用limitskip如下所示

$db->users->
  findOne(array('_id' => new MongoId('5045fa0213cfcdfc06000008')))->
    limit(5)->skip(5);

这将输出为

[_id] => MongoId Object (
    [$id] => 5045fa0213cfcdfc06000008
)
[items] => Array (
    [5] => 11
    [6] => 28
    [7] => 54
    [8] => 31
    [9] => 33
)

以及如何items使用 mongo 计算数组的总数?

4

1 回答 1

2

limit()andskip()方法仅适用于文档级别,不适用于数组级别。

您可以使用$slice运算符来获取数组的子集:

$skip = 5;
$limit = 5;

$filter = array('_id' => new MongoId('5045fa0213cfcdfc06000008'));
$slice = array('items' => array( '$slice' => array( $skip, $limit ) ));

$db->users->findOne($filter, $slice);

目前(在 MongoDB 2.2.0 中)没有直接的方法来确定数组的大小而不获取它。您可以使用新的聚合框架进行一些操作,但这可能是矫枉过正。

一种常见的使用模式是$inc在从数组中添加或删除项目时,在同一更新中调整文档中的计数器。

以及如何使用 mongo 获取项目数组的总数?

mongo下面是一个在shell中使用聚合框架的简单示例:

db.users.aggregate(
    { $unwind: '$items' },
    { $group: {
        '_id': '$_id',
        itemcount: { $sum: 1 }
    }}
)
于 2012-10-08T07:10:17.340 回答