你好,我的mongoDB素要获取最新插入记录的id,请问该怎么实现呢?请帮帮小弟,谢谢了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你好,我的mongoDB素要获取最新插入记录的id,请问该怎么实现呢?请帮帮小弟,谢谢了相关的知识,希望对你有一定的参考价值。

获取最新,要看你如何定义“最新”这个名词。

一般情况下,设定的BsonId是默认类型的(也就是你在你在shell中看到的BsonId('xxxxxxxxxxxxx')这一列的数字)。BsonId类型中没几位都代表着不同的含义,其中有一列是就是按照机器的时间来定义的。所以,在默认BsonId作为主键的时候,可以直接倒叙BsonId的列,然后取出1条就行了。

其他情况,你可以设置一个时间列,并设置好索引。然后倒叙取1条即可。

你说的获取最新记录,是不是像t-sql中下面的语句:
insert into TABLE(values);
select @id = scope_identity() from TABLE

如果是这样的,那么mongodb是没有提供直接获取id的方式的。需要你自己编写逻辑来实现,具体实现思路如下:
1、首先创建一张id生成集合Collection,这个集合专门用来生成id;
2、当你需要向其他集合中插入一条需要返回id的记录时,先从上面那张集合中插入一个id(因为你知道插入id的值,所以不涉及插入后取出的问题),然后将这个id赋值给插入业务集合的那个数据的id列中;

这里有一个你需要注意的地方,就是向id生成列中,应该插入什么值才最合适?因为这个值的插入也涉及到这个表的性能。Mongodb中提供列+1的操作,所以你只需要使用FindAndModify方法来获取一个+1后的id列的值就可以了。来自:求助得到的回答
参考技术A Id = ObjectId.GenerateNewId();

在 codeIgniter 中获取最新的更新记录 ID?

【中文标题】在 codeIgniter 中获取最新的更新记录 ID?【英文标题】:getting latest Updated record Id in codeIgniter? 【发布时间】:2017-07-27 04:51:15 【问题描述】:

我在这里提出了另一个查询,我已经工作了大约 5 个小时,但没有运气。 我有一个如下所示的图像表。

我已成功插入数据。

现在我想通过使用下面的视图、控制器和模型类来更新插入的数据。 我的视图类:

 <form role="form" method="post" enctype="multipart/form-data" action="<?php echo base_url('admin/updateCategory'); ?>">
          <div class="box-body">
            <div class="form-group">
     <input type="hidden" value='<?php echo $catDataForEdit->cat_id; ?>' name="id_hidden">
              <label for="exampleInputEmail1">Category Name</label>
              <input type="text" class="form-control" id="exampleInputEmail1" name="category_name" placeholder="Category Name" value='<?php echo $catDataForEdit->category_name; ?>' >
            </div>

            <div class="form-group">
              <label for="exampleInputEmail1">Upload Category Icon</label>
              <!--input type="text" class="form-control" id="exampleInputEmail1" placeholder="Category Icon"-->
              <p class="grey-color mt-0">Icon Size: Width: 26px, Height: 28px and Icon Format: .png</p>
              <input type="file" name="cat_icon" value='<?php echo $catDataForEdit->iconName; ?>'>
            </div>
            <div class="form-group">
               <label for="exampleInputEmail1">Upload Category Image</label>
              <p class="grey-color mt-0">Image Size: Width: 175px, Height: 120px and Image Format: .png</p>
              <input type="file" name="cat_image" value='<?php echo $catDataForEdit->imageName; ?>'>
            </div>
          </div>
          <!-- /.box-body -->

          <div class="box-footer box-footer-border">
            <div class="row">
                <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
                    <input type="submit" class="btn btn-primary" name="update_cat_submit" value="Modify">
                </div>
            </div>

我的控制器 Admin.php:

 public function updateCategory()
    $data = array();
    $targetDir = "images/dynamic/";
    $prevcatIconName; $prevCatImageName;
    $catIconName; $category_name; $catImageName; 
    $targetFilePathIcon; $targetFilePathImage; 
    $date; $unix_time;$hidden_id;
    $hidden_id = $this->input->post('id_hidden');
    if ($this->input->post('update_cat_submit')) 

        $this->form_validation->set_rules('category_name', 'Category Name', 'trim|required');
      if ($this->form_validation->run() == false) 
        $this->modifyCategory($hidden_id);
      else

          $category_name = $this->input->post('category_name');


    //Category Icon
    if ( !empty($_FILES["cat_icon"]["name"])) 
      //getting values from view
         $catIconName = basename($_FILES["cat_icon"]["name"]);
         $targetFilePathIcon = $targetDir . $catIconName;
         $iconFileType = pathinfo($targetFilePathIcon,PATHINFO_EXTENSION);


      //allow certain file formats
      $allowTypes = array('jpg','png','jpeg','gif');
      if(in_array($iconFileType, $allowTypes))
          //upload file to server
          if(move_uploaded_file($_FILES["cat_icon"]["tmp_name"], $targetFilePathIcon))
             // echo "The file ".$fileName. " has been uploaded.";


              //Category Image
            if ( !empty($_FILES["cat_image"]["name"])) 
               $catImageName = basename($_FILES["cat_image"]["name"]);
               $targetFilePathImage = $targetDir . $catImageName;
               $imageFileType = pathinfo($targetFilePathImage,PATHINFO_EXTENSION); 
               // echo $catIconName . ','. $catImageName;
                //allow certain file formats
              $allowTypes = array('jpg','png','jpeg','gif');
              if(in_array($imageFileType, $allowTypes))
                  //upload file to server
                  if(move_uploaded_file($_FILES["cat_image"]["tmp_name"], $targetFilePathImage))
                 // echo "The file ".$fileName. " has been uploaded.";
                     $date = date('Y-m-d H:i:s');
                     $unix_time=human_to_unix($date);

                //insert Category Icon into db and get CatIconId
                    $fields = array(
                  'image_name' => $catIconName,
                  'modified_at' => $unix_time,
                  'status'     => 'a'

                  );
                    //print_r($fields);
                 $iconId = $this->img_model->updateImages($fields); 
                  //echo $iconId;

                //insert Category Image
                    $fields = array(
                  'image_name' => $catImageName,
                  'modified_at' => $unix_time,
                  'status'     => 'a'

                  );

              $imageId = $this->img_model->updateImages($fields);
              //echo $iconId . ',' .$imageId;
                echo $imageId;
                //echo $unix_time;
                if ($imageId != "" && $iconId != "" ) 
                  $next_fields = array(

                    'cat_name' => $category_name,
                    'cat_icon' => $iconId,
                    'cat_image' =>$imageId,
                    'modified_at'=>$unix_time,
                    'status' =>'a'

                    );
                 // print_r($next_fields); die();
                  $result = $this->cat_model->updateCatNames($hidden_id,$next_fields);
                if ($result) 
                    //$this->Category();
                    redirect(base_url('admin/Category'));
                    //$this->load->view('admin/category');

                else
                  $data['error_msg'] = 'there is problem with your input';
                

            


              else


                  $data['error_msg'] = 'Sorry, there was an error uploading your image.';
                 $this->modifyCategory($hidden_id);
              //move_uploaded_file if else loop close
          else

              $data['error_msg'] = 'Sorry, only JPG, JPEG, PNG, GIF images are allowed to upload.';
              $this->modifyCategory($hidden_id);
          //in_array if else loop close
              else

                $data['error_msg'] = 'Please select a image to upload.';
               $this->modifyCategory($hidden_id);
              //empty file verification close

          else

             $data['error_msg'] = 'Sorry, there was an error uploading your Icon.';
             $this->modifyCategory($hidden_id);
          //move_uploaded_file if else loop close
      else

          $data['error_msg'] = 'Sorry, only JPG, JPEG, PNG, GIF icons are allowed to upload.';
          $this->modifyCategory($hidden_id);
      //in_array if else loop close
  else

      $data['error_msg'] = 'Please select a icon to upload.';
      $this->load->view('admin/modify-category', $data);
    
  



 

我的模型类 Img_model:

 public function updateImages($fields)
    $id = $this->input->post('id_hidden');

    $this->db->where('id', $id);
    $query = $this->db->update('images', $fields);

   if($this->db->affected_rows() > 0)

      $this->db->where($fields);
     $result = $this->db->get('images')->row()->id;
     //echo $result;
     return $result;

     //I have tried like below to get the last insert id but unable to get.
     //return $this->db->insert_id();
   else

    return false;
      
//close update Images

我的模型 Cat_model:

 public function updateCatNames($hidden_id,$next_fields)
 $this->db->where('id', $hidden_id);
  $this->db->update('categories', $next_fields);
  if($this->db->affected_rows() > 0)
    return true;
  else
    return false;
   
  

我尝试从 Img_model 类中获取最新插入的记录 ID,但无法获取。有人可以帮忙吗? 提前致谢!

【问题讨论】:

***.com/questions/16440366/…***.com/questions/20310298/… 感谢您的回复,我尝试了第二个我得到错误未定义:result_array()。 【参考方案1】:

试试这个:

if( $this->db->update('categories', $next_fields) )

    echo $hidden_id;

作为$this-&gt;db-&gt;update()successful / failed 执行查询时返回TRUE / FALSE。所以上面的代码echo $hidden_id只有在查询成功执行时才会出现。

【讨论】:

感谢您的快速回复。我想从 Img_model 文件中获取最新的插入 ID,而不是从 Cat_model 中获取。【参考方案2】:

第一个Try this

其次,您的表格图像中没有 cat_id 字段。您如何在图像和类别表之间创建关系。请参阅下面的示例图片

我有一个 property_images 表,并且我有 property_id,这样我也可以拥有该属性的多个图像。但是,由于您只能拥有一个类别图像,因此将 category_id 放在图像表中将使您的查询结构更加简单。

您只需更新具有您要发送的类别 ID 的记录并返回完整记录,以防您想从中获取记录的 ID。

您的情况

     $fields = array(
     'image_name' => $catImageName,
     'modified_at' => $unix_time,
     'status'     => 'a'
     );
     $imageId = $this->img_model->updateImages($fields);

您正在使用上面的代码来更新您从视图中发送类别 ID 的图像表

<input type="hidden" value='<?php echo $catDataForEdit->cat_id; ?>' name="id_hidden">

在您的图像模型中,您将获取该类别 ID 以更新图像记录

$id = $this->input->post('id_hidden');

$this->db->where('id', $id);
$query = $this->db->update('images', $fields);

现在你想获取你更新的图片ID,你可以通过这段代码得到它

 $st=$this->db->select('*')->from('images')->WHERE('image_name',$fields['image_name'])->get()->result_array();
 $updatedRecordId=$st[0]['id']
 // Now you can return it or use it. 

但这对我来说没有任何意义。

【讨论】:

【参考方案3】:

在您的模型类 Img_model 上:

public function updateImages($fields)
    $id = $this->input->post('id_hidden');

    $this->db->where('id', $id);
    $query = $this->db->update('images', $fields);

   if($this->db->affected_rows() > 0)
        return $id;
        // $id is your updated record id because it is unique.
   else
    return false;
      

【讨论】:

以上是关于你好,我的mongoDB素要获取最新插入记录的id,请问该怎么实现呢?请帮帮小弟,谢谢了的主要内容,如果未能解决你的问题,请参考以下文章

Java MongoDB FindOne 获取最后插入的记录

在MongoDB集合中获取第一个插入记录的最佳方法

在 codeIgniter 中获取最新的更新记录 ID?

如何获取刚刚插入的最新记录的ID?

MongoDB:如何使用 _id 获取集合中的最新文档?

获取 Bulk.Insert() -Mongoskin 的插入 ID