0

我有两个系列,foo 和 bar。它们看起来像这样:

foo: {name: SOMENAME, barId: MONGO_ID}
bar: {name: ANOTHERNAME}

我使用以下查询搜索 foo 集合:

searchFoo = function(query) {
    var re = new RegExp(query, "i");
    FooCollection.find({
        name: {
            $regex: re
        }
    });
};

所有找到foo的项目都显示在列表中。这很好用。问题是,我如何也显示foo查询与连接项目名称匹配的bar项目?如果可能,我不想包含barfoo文档中。

我知道 MongoDB 中没有连接。我知道bar当我有foo. 但是在这里搜索的合理模式是什么?

4

2 回答 2

1

不要使用$regex,除非它是直接的(使用 mongodb $regex语法

这应该有效:

searchFoo = function(query) {
    var re = new RegExp(query, "i");
    return FooCollection.find({
        name: re
    });
};

应该这样:

searchFoo = function(query) {
    return FooCollection.find({
        name: { $regex: query, $options: "i" }
    });
};

此外,要链接您的条形查询,请进行转换而不是正则表达式:

FooCollection.find({name:"SOMENAME"}, {transform:function(doc) {
    if(doc.barId) doc.bar = FooCollection.findOne(doc.barId)
    return doc;
}});

这应该会给你结果(在 a 之后fetch或者如果你通过光标解析)

[{
  name: SOMENAME, barId: MONGO_ID,
  bar : { name: ANOTHERNAME}
}]

有关转换的更多信息,请参阅Collections下的流星文档

于 2013-07-01T11:49:17.847 回答
0

变换也应该反过来工作:

BarCollection.find({name:"ANOTHERNAME"}, {transform:function(barDoc) {
    return FooCollection.findOne({barId:barDoc._id});
}});
于 2013-07-03T07:32:17.903 回答