我正在开发一个Meteor项目,我有一些Mongo Collections,我不知道如何处理关系和Meteor集合帮助程序包。
到目前为止,我们一直存储嵌入式文档,因此,例如,我们有一个实习集合,每个实习都有一个嵌入式文档,用户(所有者)创建了这个实习。
我们决定使用Meteor集合帮助程序包(https://github.com/dburles/meteor-collection-helpers),因此我们可以添加返回所需值的方法。问题是嵌入式文档丢失了给定的方法。
在实习中我们只会存储相关的收藏ID,如果我们想要获得分为3个不同属性街道,邮政编码和城市的Internship.address,我们只需要调用'internship.getAddress( )”。另一个例子是,如果您正在处理申请文件,请获取实习地址。您可以调用方法Application.getInternship()。getAddress()。通过这样做,我们不必存储嵌入的文档。
当我们需要使用不同的字段执行Mongo查询时,会出现问题。我们有一个非常简单的搜索函数,它返回与给定字符串匹配的所有文档:
Application.search = (query) => {
Application.find({
'applicant._id': Meteor.userId(),
$or: [
{"internship.title": { $regex: query, $options: 'i' }},
{"internship.description": {$regex: query, $options: 'i' }},
],
}, {sort: { updatedAt: -1 },
}).fetch();
}
Internship.title和descripion不再存储在实习嵌入式文档中,所以我们想知道如何处理这个问题。
答案 0 :(得分:0)
让我们假设您的Applications
集合与Internships
internshipIds
集合与Applications
Application.search = (query) => {
// find cursor internships that match the query
const matchingInternships = Internships.find({
$or: [
{title: { $regex: query, $options: 'i' }},
{description: {$regex: query, $options: 'i' }}
]
});
// extract the list of _ids from this cursor
const intershipIds = matchingInternships.map(i=>{return i._id}); // array of internshipIds
Application.find({
'applicant._id': Meteor.userId(),
internshipId: {$elemMatch: internshipIds } // look for internshipIds that are in the array
},{sort: { updatedAt: -1 },
}).fetch();
}
SELECT * FROM APPLICATIONS WHERE internshipID IN
(SELECT ID FROM INTERNSHIPS WHERE
(title LIKE query OR description LIKE query)
);
集合相关联first[a[c]-'a']++
采集。然后,您可以执行以下操作:
first[*(a+c)-'a']++
这有点类似于嵌套SQL SELECT语句,例如:
(*(first+(*(a+c)-'a')))++