php mongodb中的$ sort和$ slice以及$ addToSet

时间:2013-11-19 15:23:10

标签: php mongodb

$ret  = $this->topusers->update (
                array("keyword" => $key),
                array('$addToSet' => array("users" => array('$each' => array(array('uname' => $uname, 'counter' => $counter))),
                                                      '$sort' => array('counter'=>intval(1))
                                                      '$slice' => intval(-2)
                                                        )),
                array("upsert" => true, "w" => 1)
        );
        var_dump($ret);

这段代码有什么问题?尝试$ push也是如此。将获得修改字段名称可能不会以$ error开头。

请帮忙

3 个答案:

答案 0 :(得分:1)

找到了解决方法。让mongo命令直接工作。完整的原生php版本仍然让我不知所措..

这将允许您使用已排序的数组更新集合,并限制数组大小。

希望它对其他人也有用。

 $command = 'db.topusers.update( { keyword: "'.$key.'" },'.
                            '{ $push: { users: { $each : [{ name: "'.$uname.'", counter: '.intval($counter).'}],'.
                                     ' $sort: { counter: 1 },'.
                                     ' $slice: -2'.
                                    '}'.
                         '}'.
                '},'.
                '{upsert : true})';
    $this->db->execute($command);

答案 1 :(得分:0)

你能试试吗,

   $ret  = $this->topusers->update (
   array("keyword" => $key),
   array("$addToSet" => array("users" => array("$each" => array(array('uname' => $uname, 'counter' => $counter))),
   "$sort" => array('counter'=>intval(1)),
   "$slice" => intval(-2)
   )),
   array("upsert" => true, "w" => 1)
   );
   var_dump($ret);

答案 2 :(得分:0)

您正在错误地关闭数组()。 试试这个:

$ret  = $test->topusers->update (
    array("keyword" => $key),
    array(
        '$addToSet' => array(
            "users" => array(
                '$each' => array(array('uname' => $uname, 'counter' => $counter)),
                '$sort' => array('counter'=>intval(1)),
                '$slice' => intval(-2)
            )
        ),
    ),
    array("upsert" => true, "w" => 1)
);