PHP-MongoDb:$ pull显示错误“无法将$ pull应用于非数组值”

时间:2015-02-14 13:22:11

标签: mongodb mongodb-php

我正在使用mongodb&想从团队集合中删除用户的ID。我这样做如下。

    $where = array('_id' => new MongoId($_SESSION['team_id']));
    $update = array('$pull' => array('log_report' => array('team_admins' =>  $teamId)));
    $mongoDb->update($where, $update);

它显示我错误

" 致命错误:未捕获的异常' MongoCursorException' with message' localhost:27017:无法将$ pull应用于非数组值'在C:\ xampp \ htdocs \ datacollection_web \ core_php \ app \ php \ processing \ removeRightsAsAdminTeam.php:18"

我的Mongodb数据库结构就是这个

"log_report": {
"team_admins": [
  "54c107f264363d840c000030",
  "54c2085764363d6c17000029",
  "54c2088d64363dfc12000029",
  "54c1075864363d081500002a"
],

我没有得到它?

1 个答案:

答案 0 :(得分:0)

$pull的第二个参数需要是一个列表,而不是一个字典。

使用MongoDB的表示法(因为PHP很吵,而且我对PHP不好),这就是你正在做的事情:

collection.update(..., {$pull: {log_report: {team_admins: team_id}}}

我假设你的数据是这样的:

{
    _id: "team1",
    log_report: {
        team_admins: ["team1", "team2", "team3"]
    }
}

并且您要从team_admins列表中删除某些内容。

应该做的是:

collection.update(..., {$pull: {log_report.team_admins: [team_id]}})

请注意点符号的使用。有关详情,请访问:http://docs.mongodb.org/manual/tutorial/query-documents/#embedded-documentshttp://docs.mongodb.org/manual/reference/operator/update/pull/