【发布时间】:2017-03-31 19:37:48
【问题描述】:
我想在我的网站中实现一个搜索功能,它允许用户搜索数据库,然后根据需要对搜索结果进行过滤或排序。像this 这样的东西。
是否有一种“高效”的方式可以使用 Schema.find() 进行搜索并将结果存储在 Mongoose 对象数组中,然后根据用户输入过滤或排序该数组?还是每次用户添加新过滤器时我都必须进行新查询?
【问题讨论】:
标签: node.js mongodb sorting search mongoose
我想在我的网站中实现一个搜索功能,它允许用户搜索数据库,然后根据需要对搜索结果进行过滤或排序。像this 这样的东西。
是否有一种“高效”的方式可以使用 Schema.find() 进行搜索并将结果存储在 Mongoose 对象数组中,然后根据用户输入过滤或排序该数组?还是每次用户添加新过滤器时我都必须进行新查询?
【问题讨论】:
标签: node.js mongodb sorting search mongoose
这个答案很大程度上取决于您的架构。乍一看,您的问题的直接答案是使用query builder interface。这将让您将 where 子句链接在一起,并通过链接对选项进行排序和限制,例如。
Person.find({ occupation: /host/ }).
where('name.last').equals('Ghost').
where('age').gt(17).lt(66).
where('likes').in(['vaporizing', 'talking']).
limit(10).
sort('-occupation').
select('name occupation').
exec(callback);
但是,如果您正在开发一个 Web 应用程序,您可能会假设您希望对第一个发现进行响应,然后让用户从那里进行过滤和排序。
在这种情况下,您要么需要在客户端上进行排序和过滤(如果您通过 babel 或 lodash 使用 ES6,这并不难),或者如果您最初的 find 返回很多记录,您'仍然需要访问服务器并重新查询数据库。
【讨论】: