首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更改我的字段以保存对象数组?

如何更改我的字段以保存对象数组?
EN

Stack Overflow用户
提问于 2019-07-05 20:24:46
回答 1查看 33关注 0票数 0

我使用mongodb来存储数据。

我有一个“校园”字段来保存校园数据的ObjectIds。

最初,用户只有一个校园,但后来不得不修改校园的类型,以容纳一组校园。但最初的记录仍然是一样的。

现在,当我尝试推送一个新的campusId时,由于类型更改,一些记录没有更新。

我有大约500条记录,其中一些记录只有一个objectId,而在一些记录中,园区是一个ObjectIds数组。

像这样,

"campusIds“:ObjectId("5c8f304a4350a990f7c40")

和,

代码语言:javascript
运行
复制
"campusIds" : [ 
        ObjectId("5d136de2a02b2c14947652"), 
        ObjectId("5d136f0da02b2c14947656"), 
        ObjectId("5d137082a02b2c14947658"), 
        ObjectId("5d14520da02b2c1494765c"), 
        ObjectId("5d1459dd81801aef0865a8") ]

我不能随意更改mongodb中的记录,因为记录数量很大。

有没有办法在我的数据库中把字段改成数组?

EN

回答 1

Stack Overflow用户

发布于 2019-07-05 20:41:31

创建一个查询,该查询只过滤字段存在且类型为ObjectId ($type 7)的文档。然后,可以使用此查询的结果对集合进行批量更新。以下异步操作执行上述操作:

代码语言:javascript
运行
复制
(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
    }
})()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56903008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档