2

当更改某个文档的位置时(不确定结构的确切程度),我想在另一个集合中创建该文档的备份,然后再将其保存回我当前的集合。要进行备份,我尝试了以下操作:

$mongoDbObj = $collection->findOne($filter);
...
$collectionBackup->insert($mongoDbObj,true);

...但这只能工作一次,因为 MongoID 被复制了。当我再次尝试备份同一个文档时,mongoID 已经存在于 backupCollection 中。所以我的问题是:

我可以在 PHP 中复制 MongoDB 文档,用新的 MongoID 覆盖 MongoID,然后再插入另一个集合,而不更改原始文档的 MongoID?


这个问题简化为:我该怎么做:

$mongoDbObj = $collection->findOne($filter);
...
$collectionBackup->insert($mongoDbObj,true);
// change MongoId so the next line doesn't throw exception
$collectionBackup->insert($mongoDbObj,true);
// save my object back with the original MongoID
$collection->save($mongoDbObj);

同样有用的是如何克隆/复制 MongoDB 文档,然后只需在复制的文档中粘贴新的 MongoID 即可轻松解决问题。

4

2 回答 2

1
$mongoDbObj = $collection->findOne($filter);
$mongoDbObjBak = array();

foreach($mongoDbObj as $key => $value) {
    if($key != '_id') {
        $mongoDbObjBak[$key] = $value;
    }
}

$collectionBackup->insert($mongoDbObjBak,true);
$collection->save($mongoDbObj);
于 2013-04-11T15:22:55.157 回答
1

因此,您想复制一个文档并将其复制到另一个没有 _id mongo 的集合中。

使用字段查询以删除您不需要的字段。

例子 :

$mongoDbObj = $collection->findOne($filter);
$mongoDbObj->fields(array("_id" => false));

文档:http ://www.php.net/manual/en/mongocursor.fields.php

玩得开心 :)

于 2014-05-07T07:08:37.320 回答