我们有一个存储子对象列表的集合:
{
_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中轻松遍历它们并更新它们,但这似乎是浪费。 有没有更好的方法呢?
答案 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);
});