mongodb 合并集合
最近,我一直在使用几个月前创建的数据库。 对于该特定项目,我为每组项目创建了一个单独的数据库集合。 当时,我有一些按主题分类的书籍和文章,出于某种原因,我将所有书籍和文章根据主题分别放在不同的集合中。 然后,我为每个主题创建了端点。 这样,我可以为用户搜索的主题切换出url集合,如下所示:
在这种情况下,用户搜索“如何穿裤子”。 但是有了一个主题为“如何穿裤子”的合集,我现在可以仅获取这4个结果,而无需获取整个库。 我用来完成这项工作的另一个组件是单词映射对象。 我不会在这里介绍,但是如果您有兴趣,可以在这里查看: https : //hackernoon.com/creating-more-accurate-search-results-for-small-sites-436e64da79b6
尽管这很好用,但我最近希望能够一次搜索所有集合,而要拥有这么多单独的集合并不容易。 基本上,我想将所有集合合并为一个集合。
我首先进行提取,列出数据库中的所有集合。 我正在使用mlab,如果您正在使用mlab,则执行此操作的方法如下:
To get the collections in the specified database:
GET /databases/{database}/collections
Example:
https://api.mlab.com/api/1/databases/my-db/collections?apiKey=myAPIKey
因此,您的实现代码将如下所示:
https://api.mlab.com/api/1/databases/my-db/collections?apiKey=myAPIKey
如果此时console.log您的api,您将有一个数组,每个集合名称都是字符串。 完善。 现在,我将进行一个for循环,并遍历这些集合名称,并基本上执行与顶部相同的操作,在每次循环迭代中进行访存,并将访存集合名称替换为当前的api数组项。
https://api.mlab.com/api/1/databases/my-db/collections/api[i]?apiKey=myAPIKey
在这里,我们在获取URL(my-db)中拥有数据库名称,并且在每个循环中,集合名称都会更改(api [i])。 我们在那里获取数据,并将数据保存为“ test”。 然后,我们有一个嵌套循环,在其中循环测试,并将每个数组项推入名为“ arr”的数组。
现在,如果我们console.log“ arr”,我们应该在一个位置而不是多个集合中包含每个集合的合并数组。
接下来,我们需要将所有数据重新格式化为一个新的JSON对象数组。
setTimeout(function(){
for (var i = 0; i < arr.length; i++) {
let text = arr[i].article_text;
let text2 = text.replace(/"/g, "");
let text3 = text2.replace(/'/g, "");
arr[i] = `
<p>{"articleAuthor": "${arr[i].article_author}",
"articleAuthorTitle": "${arr[i].article_author_title}",
"articleName": "${arr[i].article_name}",
"articleDate": "${arr[i].article_date}",
"articleText": "${text3}"}</p>
`;
document.getElementById('verseText').innerHTML += arr[i];
}
}, 50000);
我在这里使用了set timeout函数,以允许完成上一步中的所有提取。 否则,我可能会在提取完成之前开始构建JSON数据。 我遍历数组“ arr”中包含的数据,并将其用大括号内的key:value对拍成一段,然后在DOM中呈现每个对象。 然后,我只是将输出复制并粘贴到json文件中。 只要没有错误,那我应该很好。 此时使用mlabs,我可以保存文件,然后使用命令行提示符将其导出到mlabs集合:
mongoexport -h ds#####.mlab.com:#### -d <database name> -c <collection name> -u <user> -p <password> -o filename.json
我们完成了。 现在,我可以从一个单独的数据库访问我的所有数据,但是我没有使用单独的集合来更改原始结构,以防万一我以后仍想使用该格式。
现在,在您发表评论并说出这种方法的愚蠢之处之前,请不要担心,我知道。 但是,如果您像我一样,并且对前端更加满意,这是一种实现此目的的方法。 我并不是说这是最好的,但它是一种方法,而且有效。
翻译自: https://hackernoon.com/combining-mongodb-collections-928f187333b5
mongodb 合并集合