更新 mongodb 文档时删除的字段

Posted

技术标签:

【中文标题】更新 mongodb 文档时删除的字段【英文标题】:Fields getting removed when updatating mongodb document 【发布时间】:2015-07-30 19:28:50 【问题描述】:

我是 mongoDB 的新手,在使用 Save() 时偶然发现了一些更新问题。

当我单击 html 页面中的保存按钮时,我运行以下代码:

<?php
$action = (!empty($_POST['btn_submit']) &&
        ($_POST['btn_submit'] === 'Save')) ? 'save_article' : 'show_form';
$id = $_REQUEST['id'];
try 
    $mongodb = new Mongo();
    $articleCollection = $mongodb->myblogsite->articles;
 catch (MongoConnectionException $e) 
    die('Failed to connect to MongoDB ' . $e->getMessage());

switch ($action) 
    case 'save_article':
      $article = array();
        if (!empty($id)) 
            $article['_id'] = new MongoId($id);
         else 
            $article['_id'] = new MongoId();
        
        $article['title'] = $_POST['title'];
        $article['content'] = $_POST['content'];
        $article['tags'] = $_POST['tags'];

        if (!empty($id)) 
            $article['updated_at'] = new MongoDate();
         else 
            $article['saved_at'] = new MongoDate();
        

        $articleCollection->save($article);
        break;
    case 'show_form':
    default:
        if (!empty($id)) 
            $article = $articleCollection->findOne(array('_id' => new MongoId($id)));
        

?>

这个想法是,如果$id 不为空,我更新文档,否则我插入。 我使用save() 来管理它。

我想要两个日期字段。一个保存文档的制作日期和一个新的保存文档上次更新时间的日期。 “save_at” 无法更新。每次进行更新时,“updated_at” 都会更改。 我现在的问题是,当我尝试添加 “updated_at” 时,“save_at” 会被删除。 我还更新了“saved_at”-字段。

我的问题是:

如何在不删除 “saved_at” 字段的情况下插入新字段 ('updated_at')

如何在不更新其值的情况下保持 “saved_at”-field 中的日期不变?

【问题讨论】:

【参考方案1】:

使用可以通过更新命令来完成

$collection->update(array('id' => id),array('$set' => array('updated_at' =>$article['updated_at'])));

【讨论】:

以上是关于更新 mongodb 文档时删除的字段的主要内容,如果未能解决你的问题,请参考以下文章

mongodb更新查询删除命令中指定的字段以外的所有数组字段

从文档中删除字段后,MongoDB 集合大小未更改

在mongodb中保存或更新文档时如何防止更新“updatedAt”字段?

《MongoDB入门教程》第18篇 文档更新之$unset操作符

《MongoDB入门教程》第18篇 文档更新之$unset操作符

mongodb findOneAndUpdate 只获取更新的字段