使用php中的limit
和skip
使用mongo文档的内部数组。
$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
)
是否可以将limit
与skip
一起使用上面的mongo doc,如下所示
$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
)
如何使用mongo获取items
数组的总数?
答案 0 :(得分:2)
limit()
和skip()
方法仅适用于文档级别,而不适用于数组级别。
您可以使用$slice
operator来获取数组的子集:
$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)并不是一种直接的方法来确定数组的大小而不提取它。你可以使用新的Aggregation Framework进行一些操作,但这可能有些过分。
一种常见的使用模式是,当在数组中添加或删除项目时,使用$inc
调整同一更新中文档中的计数器。
如何使用mongo获取项目数组的总数?
以下是使用mongo
shell中的聚合框架的快速示例:
db.users.aggregate(
{ $unwind: '$items' },
{ $group: {
'_id': '$_id',
itemcount: { $sum: 1 }
}}
)