小编Xre*_*res的帖子

MongoDB 2.6索引设置,使用$或$ in查询,带限制和排序

我有一个有点复杂的查询,这对我的应用程序非常关键.

$cur = $col->find(
    array (
        '$or' => array(
            array('owner' => $my_id),
            array('owner' => array('$in' => $friends), 'perm.type' => array('$in' => array('P', 'F'))),
            array('owner' => array('$in' => $friends), 'perm.list' => $my_id)
        )
    )
)->limit(10)->skip(0)->sort(array('ca' => -1));
Run Code Online (Sandbox Code Playgroud)

目的是找到前10个帖子,按照他们在desc顺序中的创建时间排序,这些帖子是:

一个).由我自己制作,或b).由我的朋友制作,允许类型为'P'供公众使用,或'F'供朋友使用,或c).由我的朋友制作,许可列表专门指定我作为观众.

变量$ friends是一组用户ID,他们是我的朋友.perm.type总共有4个值,分别是'P','F','S','C'.perm.list是一组有权查看此帖子的用户ID.

上述查询可用于过滤掉正确的结果.但是我遇到了在它们上创建有效索引的问题.

我为此查询创建的索引是:

$col->ensureIndex(array('owner' => 1, 'ca' => -1));
$col->ensureIndex(array('owner' => 1, 'perm.type' => 1, 'ca' => -1));
$col->ensureIndex(array('owner' => 1, 'perm.list' => 1, 'ca' => -1));
Run Code Online (Sandbox Code Playgroud)

第一个索引是针对查询条件的第一部分设计的,第二个索引是针对第二个条件设计的,第三个索引是针对第三个条件设计的,并且是多键索引.

一个典型的帖子看起来像这样:

{
    "_id": "...",
    "owner": "001",
    "perm": {
        "type": "P",
        "list": []
    }, …
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-php mongodb-query

6
推荐指数
1
解决办法
850
查看次数

标签 统计

mongodb ×1

mongodb-php ×1

mongodb-query ×1