更新所有文档以添加现有字段的sha1哈希

时间:2019-05-17 21:43:22

标签: mongodb data-migration

我需要向sha1具有文档中已存在的串联集合的所有文档添加一个字段

我有一个PHP脚本运行迁移并提取个人记录。然后很容易将“内爆”值散列,然后将sha1保存回数据库。

这个问题永远困扰着大型数据集。理想情况下,可以将其种到mongo并处理其余请求的一个“ updateMany”请求将更安全/更高效/更快。

do {
            $itemIDs = DB::collection('items')
                ->where('deleted_at', 'exists', false)
                ->where('item_hash', null)
                ->limit(10000)
                ->get(["_id"]);

            $ids = [];
            foreach ($itemIDs as $itemID) {
                $ids[] = $itemID['_id'];
            }

            $recordCount = count($itemIDs);

            $itemChunks = array_chunk($ids, 100);
            foreach ($itemChunks as $key => $itemChunk) {
                $prods = Item::whereIn("_id", $itemChunk)->get();
                foreach ($items as $item) {
                    $hash = sha1(implode("",$item->relationships['options']));
                    $item->item_hash = $hash;
                    $item->save();
                }
            }
        } while ($recordCount > 0) ;

我想运行一个查询,该查询可以执行以下操作:

db.collection('items').updateMany(
  {'deleted_at': {'$exists': false},'item_hash':null}
  {'$set': {'item_hash': sha1($this.options.join('')}}
);

0 个答案:

没有答案