我使用mongodb来存储数据。
我有一个“校园”字段来保存校园数据的ObjectIds。
最初,用户只有一个校园,但后来不得不修改校园的类型,以容纳一组校园。但最初的记录仍然是一样的。
现在,当我尝试推送一个新的campusId时,由于类型更改,一些记录没有更新。
我有大约500条记录,其中一些记录只有一个objectId,而在一些记录中,园区是一个ObjectIds数组。
像这样,
"campusIds“:ObjectId("5c8f304a4350a990f7c40")
和,
"campusIds" : [
ObjectId("5d136de2a02b2c14947652"),
ObjectId("5d136f0da02b2c14947656"),
ObjectId("5d137082a02b2c14947658"),
ObjectId("5d14520da02b2c1494765c"),
ObjectId("5d1459dd81801aef0865a8") ]
我不能随意更改mongodb中的记录,因为记录数量很大。
有没有办法在我的数据库中把字段改成数组?
发布于 2019-07-05 20:41:31
创建一个查询,该查询只过滤字段存在且类型为ObjectId ($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
}
})()
https://stackoverflow.com/questions/56903008
复制相似问题