将字符串转换为对象数组

时间:2016-01-11 12:04:33

标签: mongodb

我们有一个存储子对象列表的集合:

{
    _id: MongoID,
    title: 'Some title',
    items: [
       {
          sub_type: 'MongoId'
       }
    ]
}

令人讨厌的是,我们已经将item.sub_type存储为MongoId对象和字符串。

我已经创建了一个查询以查找所有字符串版本:(我正在使用正则表达式,因为一些旧项目只是数字而不是ID,它们可以被忽略)。

$query = array(
  'items' => array(
    '$elemMatch' => array(
      'sub_type' => array(
        '$type' => 2,
        '$regex' => new MongoRegex('/^[a-f\d]{24}$/i')
      )
    )
  )
);
$results = $mongo->collection->find( $query );

我现在正试图想出将这些转换为MongoIds的最佳方法。我可以在PHP中轻松遍历它们并更新它们,但这似乎是浪费。 有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

我刚才意识到我并没有真正理解这个问题。这是一个更新。这个应该这样做。

使用mongo控制台...

 db.collection.find({}).forEach(function (x) {
     x.items.forEach(function (y) {
         y.sub_type = ObjectId(y.sub_type);
     });
     db.collection.save(x);
 });