【发布时间】:2020-03-04 17:47:50
【问题描述】:
在我们的 MongoDB 文档中,我们有两个字段,organisationId 和 employeeId。
我想显示集合中的所有元素,它们中的任何一个都与查询参数匹配,因此是基本的 OR。
排序的一个条件是我要求首先出现两个字段都匹配查询参数的文档,然后是匹配organisationName参数的文档,下一个。
我们的想法是先显示员工(即您)的数据,然后再显示您组织的数据。 (在我们的案例中,您首先建议的主题,然后是您组织中的其他员工建议的主题。 截至目前,我正在使用以下查询来实现这一点 -
Campaigns.find({$and : [{'organisationName' : organisationName},{'employeeName' : userName}]},{}),
Campaigns.find({$and : [{'organisationName' : organisationName},{'employeeName' : {$ne : userName}}]},{})
但这对我来说似乎不是最有效的方法。任何其他可以在一次调用中执行此操作的查询都会非常好,因为这也有助于分页。
提前致谢
【问题讨论】:
-
解决方案是,为每个文档添加一个新字段,使用
$addFields,比如说order,条件使用$cond and if添加其他运算符,根据条件为其分配值 1,2,3,4....。然后使用$sort中的order进行排序。 -
我不赞成更改数据。我可以设想的问题是,每个组织将有多个员工,每个人都会有一些主题的 ID。我们现在不会为每次搜索更改这些值。
-
不,您不必更改数据,当您触发查询时,只需在查询中使用 $addFields 而不是在 DB 中添加一个新字段,然后使用它仅在查询中,不更改任何数据。而且这个文件不会被存储,所以它就在那里,直到你发回结果,当其他员工进行搜索时,将为他创建一个新的订单文件,它只是上下文和临时的,而不是永久的。在此处阅读有关 $addFields docs.mongodb.com/manual/reference/operator/aggregation/… 的信息。
-
哦酷,我试试看,谢谢
标签: node.js mongodb sorting nosql mongodb-query