Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 在collection.find中包含来自第二个集合的相关数据_Meteor - Fatal编程技术网

Meteor 在collection.find中包含来自第二个集合的相关数据

Meteor 在collection.find中包含来自第二个集合的相关数据,meteor,Meteor,我有两个收藏,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和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
项?如果可能,我不想在
foo
文档中包含
bar


我知道MongoDB没有加入。我知道当我有一个
foo
时,我可以通过第二次查询获得
bar
的名称。但是什么是搜索的合理模式呢?

不要使用
$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;
}});
这将为您提供结果(在
获取之后,或者如果您通过光标进行解析)


有关转换的更多信息,请参见meteor文档中的

转换也应以另一种方式工作:

BarCollection.find({name:"ANOTHERNAME"}, {transform:function(barDoc) {
    return FooCollection.findOne({barId:barDoc._id});
}});

嗯,不是这样,对不起。。。我的目标是能够搜索另一个并找到foo文档。尽管如此,transform还是很不错,但它并没有做到这一点,是吗?是的,但它仍然没有给我一个查询,我可以在其中搜索“另一个”和“一些”,并且两次都可以得到foo项(可以选择附加bar项)。这是我的目标。你需要运行两次,一次针对你的foo集合,一次针对你的bar集合。在mongo中没有连接,无论你使用什么模式,你只是在同一个地方着陆。我将从一个发布函数发布两个游标,以使其更易于维护。
BarCollection.find({name:"ANOTHERNAME"}, {transform:function(barDoc) {
    return FooCollection.findOne({barId:barDoc._id});
}});