【问题标题】:PHP-MongoDb: $pull shows error " Cannot apply $pull to a non-array value"PHP-MongoDb:$pull 显示错误“无法将 $pull 应用于非数组值”
【发布时间】:2015-02-14 13:22:10
【问题描述】:

我正在使用 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' 与消息 '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"
],

我没听懂???

【问题讨论】:

    标签: mongodb mongodb-php


    【解决方案1】:

    $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/

    【讨论】:

    • $update = array('$pull' => array('log_report.team_admins' => $teamId));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 2012-06-09
    • 2021-01-22
    相关资源
    最近更新 更多