$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开头。
请帮忙
答案 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)
);