加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 将Mongo Embeded文档移动到自己的集合中

发布时间:2020-12-17 03:19:57 所属栏目:百科 来源:网络整理
导读:有人能指出我正确的方向,我有一个Collection(Forms)每个Form都有一个嵌入式文档数组(Responses).每个表单的响应都变得很大,事后看来嵌入它们是一个坏主意(包括嵌入式的mongo文档具有最大大小限制). 有没有办法可以快速轻松地将所有这些嵌入式响应移动到自己
有人能指出我正确的方向,我有一个Collection(Forms)每个Form都有一个嵌入式文档数组(Responses).每个表单的响应都变得很大,事后看来嵌入它们是一个坏主意(包括嵌入式的mongo文档具有最大大小限制).

有没有办法可以快速轻松地将所有这些嵌入式响应移动到自己的集合中?是否有像旧的SQL选择这样的东西?我已经在rails控制台中浏览了一下,但是有很多嵌入式文档无法访问它,所以我想它在mongo控制台中必须是一个复杂的查找和插入查询? (只是在那里猜测)

我的模型是固定的,但是这个迁移(以及mongo文档)让我很难过.

TIA
Dougle

解决方法

所以这是一个开始……这是在mongo shell中

db.questions.insert({name:"jwo",responses:[{question:"your name?",answer:"yomamma"},{question:"your name?",answer:"pappa"}]});

这样创建了一个文档json结构:

> db.questions.findOne();
{
    "_id" : ObjectId("4d877e89b75dc42c4709278d"),"name" : "jwo","responses" : [
        {
            "question" : "your name?","answer" : "yomamma"
        },{
            "question" : "your name?","answer" : "pappa"
        }
    ]
}

现在循环遍历响应,并使用问题’_id设置其question_id,然后将其插入新的响应集合中

> for(i=0; i<question.responses.length; ++i){
... question.responses[i].question_id = question._id;   
... db.responses.insert(question.responses[i]);                                                                      
... }

> db.responses.findOne();
{
    "_id" : ObjectId("4d878059b75dc42c4709278e"),"question" : "your name?","answer" : "yomamma","question_id" : ObjectId("4d877e89b75dc42c4709278d")
}

您将要更改db.questions.findOne以查找所有这些并循环.如果这需要一段时间,您可能需要切换到map-reduce功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读