【问题标题】:MongoDB + PHP Item wont remove()?MongoDB + PHP 项目不会删除()?
【发布时间】:2010-10-29 02:36:49
【问题描述】:

我不确定我做错了什么,但是使用 MongoDB 和 PHP 我正在尝试这样做:

$db->textures->remove(array("_id"=>$_GET['texture_id']),array("safe" => true))

但是什么也没发生。我做了一个print_r,上面写着:

Array ( [err] => [n] => 0 [ok] => 1 )

【问题讨论】:

    标签: php arrays mongodb database


    【解决方案1】:

    以下奥斯卡龙芯的答案是正确的,但现在自 1.5.0 起已弃用:

    $db->textures->remove(array("_id"=>new MongoId($_GET['texture_id'])),array("safe" => true));
    

    现在应该像这样使用 "w" 选项来编写:

    $db->textures->remove(array("_id"=>new MongoId($_GET['texture_id'])),array("w" => 1));
    

    Sources

    【讨论】:

      【解决方案2】:

      要根据 ID 删除文档,您需要确保将 ID 作为 MongoID 对象而不是字符串传递:

      <?php 
      $id = '4b3f272c8ead0eb19d000000';
      // will not work:
      $collection->remove(array('_id' => $id), true);
      
      // will work:
      $collection->remove(array('_id' => new MongoId($id)), true);
      ?>
      

      【讨论】:

        【解决方案3】:

        废话,看起来因为我删除了一个 MongoID 我必须这样做:

        $db->textures->remove(array("_id"=>new MongoId($_GET['texture_id'])),array("safe" => true));
        

        【讨论】:

        • 仅当 ID 作为 MongoID 添加时才AFAIK。
        • 不是_id总是自动添加为mongoid吗?
        • 是的,如果创建时没有提供_id,那么是的。 MongoId 映射到作为对象的 ObjectID,这就是为什么仅提供 ID 不起作用的原因。但是,如果需要,您可以提供自己的(非 MongoID)_id 值,并在不使用 MongoId 对象的情况下搜索它们。
        • 例如,看看以下内容: > db.test.save({ name: "Test Object 1"}); > db.test.save({ _id: "abc123", "name" : "测试对象 2" }); > db.test.find(); { "_id" : ObjectId("4cca41c9d86d000000006d33"), "name" : "测试对象 1" } { "_id" : "abc123", "name" : "测试对象 2" }
        • 哦!惊人的。谢谢!
        【解决方案4】:

        如果在保存记录时未提供 ID,则可以,您需要使用 MongoID 对象来构建正确的搜索条件。但是,您可以将 _id 定义为任何您想要的 - 纯整数、文本、时间戳等 - 您可以使用它来搜索任何其他属性。

        请参阅以下 CLI 输出作为示例 - 第一个对象的 _id 包含 ObjectId 类型,但第二个对象包含一个简单的字符串。按字符串搜索正常工作:

        > db.test.save({ name: "Test Object 1"});
        > db.test.save({ _id: "abc123", "name" : "Test Object 2" });
        > db.test.find();
        { "_id" : ObjectId("4cca41c9d86d000000006d33"), "name" : "Test Object 1" }
        { "_id" : "abc123", "name" : "Test Object 2">
        db.test.find({"_id" : "abc123"});
        { "_id" : "abc123", "name" : "Test Object 2" } }
        

        【讨论】:

        • 只是好奇,但是有没有办法让 Mongo 自动生成和 ID,就像它默认的那样,但让它成为一个字符串?我喜欢这些 id 很长而且几乎不可能猜到,而且它们是默认完成的。如果不是,我可以自己生成它们,只是好奇是否有一种方法可以更改插入时的类型。
        • AFAIK,据我所知,我不是 mongo 大师。
        猜你喜欢
        • 2021-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-16
        • 2013-06-08
        • 1970-01-01
        • 2012-10-29
        相关资源
        最近更新 更多