Mongodb嵌入式对象和Meteor收集助手

时间:2016-10-17 08:10:14

标签: mongodb meteor

我正在开发一个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不再存储在实习嵌入式文档中,所以我们想知道如何处理这个问题。

1 个答案:

答案 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')))++