gpt4 book ai didi

ruby-on-rails - 将 Mongodb 嵌入文档移动到自己的集合中

转载 作者:IT老高 更新时间:2023-10-28 13:37:28 24 4
gpt4 key购买 nike

有人能指出我正确的方向吗,我有一个集合(表单),每个表单都有一个嵌入的文档数组(响应)。每个表单的响应都变得庞大,事后将它们嵌入是一个坏主意(包括嵌入式在内的 mongo 文档有最大大小限制)。

有没有一种方法可以让我快速轻松地将所有这些嵌入式响应移动到它们自己的集合中?有没有像旧的 SQL select into 这样的东西?我在 Rails 控制台中环顾了一下,但是有这么多嵌入式文档无法访问它,所以我想它必须是在 mongo 控制台中进行复杂的查找和插入查询? (只是猜测)

我的模型是固定的,但是这个迁移(和 mongo 文档)让我很困惑。

TIA道尔

最佳答案

所以这是一个开始...这是在 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"
}
]
}

现在循环遍历响应,并将其 question_id 设置为问题的 _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 函数。

关于ruby-on-rails - 将 Mongodb 嵌入文档移动到自己的集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5380584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com