我正在使用mongodb存储数据。
我有一个“校园”字段来保存“校园”数据的ObjectId。
最初,用户只有一个校园,但后来必须修改校园类型以容纳一系列校园。但是最初的记录保持不变。
现在,当我尝试推送新的CampusId时,由于类型更改,某些记录未更新。
我有大约500条记录,其中一些记录具有单个objectId,而在某些记录中,校园是一个ObjectId数组。
喜欢这个
“ campusIds”:ObjectId(“ 5c8f304a4350a990f7c40”)
然后
"campusIds" : [
ObjectId("5d136de2a02b2c14947652"),
ObjectId("5d136f0da02b2c14947656"),
ObjectId("5d137082a02b2c14947658"),
ObjectId("5d14520da02b2c1494765c"),
ObjectId("5d1459dd81801aef0865a8") ]
由于大量记录,我无法手动更改mongodb中的记录。
是否可以将字段更改为数据库中的数组?
答案 0 :(得分:0)
创建一个查询,该查询仅过滤字段存在且字段类型为Object {$type 7
}的文档。然后,该查询的结果可用于对集合进行批量更新。
以下异步操作将执行上述操作:
(async () => {
try {
const docs = await db.collection('collectionName').find({
'campus': {
'$exists': true,
'$type': 7
}
}).toArray()
const ops = docs.map(({ _id, campus }) => ({
'updateOne': {
'filter': { _id } ,
'update': { '$set': { 'campusIds': [campus] } }
}
}))
db.collection('collectionName').bulkWrite(ops)
} catch(err) {
// handle error
}
})()