gpt4 book ai didi

mongodb - Meteor.js - 对多个集合进行用户搜索的方法

转载 作者:可可西里 更新时间:2023-11-01 09:52:24 28 4
gpt4 key购买 nike

关于如何在我的 Meteor 应用程序中设置集合,我有点进退两难。用户搜索栏是我应用程序的核心部分,用户需要能够输入一次搜索并在多个不同的集合中获得结果:

user query : 'foo'

var query = 'foo';
var actors_results = Actors.find({ $or : [{ name : query}, { actor_biography : query }] );
var films_results = Films.find({ $or : [{ name : query}, { description : query }] );
var cinemas_results = Cinemas.find({ $or : [{ name : query}, { genres : query }] );

对于搜索结果显示,这不太好 - 我不认为 (???) 我可以将这些游标组合成一个游标,像分页这样简单的事情变得几乎不可能做到(或者我不知道如何去做)。

我知道的唯一解决方案是制作一个 SuperCollection,我将所有文档放在其中,并有一个字段“类型”,可以是“ Actor ”、“电影”或“电影院”,然后分页等就变得容易了。

但在我看来,这确实使其他一切变得复杂……数据库的结构不再反射(reflect)数据。 Actor 和电影院在数据/结构方面没有任何共同点,我只需要能够并行搜索它们。

另外,我将如何根据字段“type”的值为 SuperCollection 设置多个验证方案?

非常感谢任何想法/建议!!!

最佳答案

好的,我已经找到了一种无需重新构建整个数据库即可执行此操作的方法。好样的 meteor !

在服务器上:

Meteor.publish('search_results', function(query){
if(query){
var self = this;
var actors = Actors.find({ $or : [{ name : query}, { actor_biography : query }] ),
films = Films.find({ $or : [{ name : query}, { actor_biography : query }] ),
cinemas = Cinemas.find({ $or : [{ name : query}, { actor_biography : query }] );
actors.forEach(function(doc){
self.added('search_collection', doc._id, { name : doc.name, type : 'actor' });
});
films.forEach(function(doc){
self.added('search_collection', doc._id, { name : doc.name, type : 'film' });
});
cinemas.forEach(function(doc){
self.added('search_collection', doc._id, { name : doc.name, type : 'cinema' });
this.ready();
} else {
this.ready();
}
});

在客户端:

Deps.autorun(function(){
Meteor.subscribe('search_results', Session.get('currentQuery'));
});

SearchCollection = new Meteor.Collection('search_collection');

现在 SearchCollection 包含我想要从结果中获取的数据,我可以在其中分别决定我想要从每个集合中获取哪些数据。

一个缺点是我显然在重复数据 - 如果不是所有这些记录中的一些记录已经存在于客户端...

关于mongodb - Meteor.js - 对多个集合进行用户搜索的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20565554/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com