我的应用程序中有两个集合,它们是从两个独立的json文件中解析出来的。我已将这两个文件中的数据插入到单独的集合中。集合具有相应的数字ID,我想在新的集合中匹配它们。例如: postmeta 集合的值为post_id
, 帖子 集合具有相应的{ {1}}。
这里进一步解释这是一个简单的集合示例。有一点需要注意的是,有超过730个收集帖子,虽然有匹配的ID,但它们没有排序,因此当我查看它们时它们彼此不匹配。
帖子 集合示例:
ID
postsmeta 集合示例:
{
"_id": "kTeQxenYZcQfPiaYv",
"ID": "44",
"post_content": "Today we talked about the letter Hh..."
}
我想要做的是解析收藏品,并采用 帖子 集合,其中{
"_id": "otEGQYxvv6MkCABST",
"post_id": "44",
"meta_value": "http://www.mrskitson.ca/wp-content/uploads/2010/11/snackTime.jpg"
}
与 postsmeta相匹配 集合。找到匹配后,我想将集合内容(ID
& post_content
)插入新集合中。
到目前为止,这是我的所有代码。
LIB /集合/ posts.js
meta_value
服务器/ publications.js
Postsmeta = new Mongo.Collection('postsmeta');
Posts = new Mongo.Collection('posts');
服务器/ main.js
Meteor.publish('postsmeta', function() {
return Postsmeta.find();
});
Meteor.publish('posts', function() {
return Posts.find();
});
答案 0 :(得分:3)
让我们稍微重构你的代码。我们将首先构建Postsmeta
集合,然后共同创建Posts
和PostsCombined
集合。由于Postsmeta
已经存在,我们可以在其中搜索以查找匹配的文档。
Meteor.startup(() => {
const postsmeta = JSON.parse(Assets.getText('postsmeta.json'));
postsmeta.forEach(doc => {
Postsmeta.insert({ post_id: doc.post_id, meta_value: doc.meta_value });
});
const posts = JSON.parse(Assets.getText('posts.json'));
posts.forEach(doc => {
const post = { ID: doc.ID, post_content: doc.post_content}
Posts.insert(post); // omit if you don't need the uncombined collection
const metadoc = Postsmeta.findOne({post_id: doc.ID}); // essentially a JOIN
if (metadoc) post.meta_value = metadoc.meta_value; // guard against no matching meta
PostsCombined.insert(post);
});
});
postsmeta data中没有以下ID:
["56", "322", "521", "563", "583", "608", "625", "671", "707", "708",
"711", "713", "754", "758", "930", "1068", "1126", "1235", "1237", "1238",
"1239", "1246", "1249", "1256", "1263", "1355", "1375", "1678", "1680", "1763",
"1956", "2107", "2121", "2148", "2197", "2249"]
答案 1 :(得分:0)
您想将这些藏品放在一起进行咨询吗?因为插入对于两个不同的集合是正确的。
提示
如果是查询使用" find().map()",如果你使用mongodb,在函数中它会返回第一个集合的每一行的值,很快你就会可以调用其他集合并检查集合的ID并返回所需内容的JSON或数组。我并不假装这样做,但这是将两个系列放在一起的一种方式。
最佳解决方案
正确的方法是不要认为noSql是一个关系数据库,就像其他postgres,mysql等...认为它是一个动态银行,在同一个集合中,你可以拥有当时所需的一切,所以我认为你创建了一个新的集合,它将是两者的结合,当save将数据保存在这个其他集合中时,这将是查询集合,并且它会减轻查询的重量,直到它返回数据更快,但假设比上面的例子快5倍...
我希望我有所帮助,对此我会有任何疑问或怀疑。拥抱!