MongoDB自定义在两个字段上排序

在我们的MongoDB文档中,我们有两个字段, organisationId employeeId

我想显示集合中所有具有与查询参数匹配的元素,因此是基本OR。

排序的一个条件是我要求首先出现两个字段都与查询参数匹配的文档,然后才出现与 organizationName 参数匹配的文档,下一个。

其想法是先显示员工(即您)的数据,然后再显示组织的数据。 (在我们的案例中,您首先提出的主题是您提出的,然后是组织中其他员工提出的主题。 到目前为止,我正在使用以下查询来实现这一目标-

Campaigns.find({$and : [{'organisationName' : organisationName},{'employeeName' : username}]},{}),Campaigns.find({$and : [{'organisationName' : organisationName},{'employeeName' : {$ne : username}}]},{}) 

但这对我来说似乎不是最有效的方法。只需一个调用就可以执行此操作的任何其他查询都将非常好,因为这也将有助于分页。

预先感谢

xiaolongxiadoudou 回答:MongoDB自定义在两个字段上排序

此聚合查询获得所需结果:

输入文档:

{ "org" : "o1","emp" : "e1","data" : "1234" }
{ "org" : "o1","emp" : "e2","data" : "abcd" }
{ "org" : "o1","emp" : "b3","data" : "xyz" }
{ "org" : "o2","emp" : "z3","data" : "zzz" }

查询参数:

orgNameParam = "o1"
usrNameParam = "e2"

查询:

db.orgemp.aggregate([
  { $match: { org: orgNameParam} },{ $facet: {
     firstQuery: [
          { $match: { emp: usrNameParam } }
     ],secondQuery: [
          { $addFields: { isNotEmp: { $ne: [ "$emp",usrNameParam ] } } },{ $match: { isNotEmp: true } },{ $project: { isNotEmp: 0 } },{ $sort: { emp: 1 } },],} },{ $project: { result: { $concatArrays: [ "$firstQuery","$secondQuery" ] } } },])

结果:

{
        "result" : [
                {
                        "_id" : ObjectId("5dc51432c2ac920e04692778"),"org" : "o1","data" : "abcd"
                },{
                        "_id" : ObjectId("5dc51432c2ac920e04692779"),"data" : "xyz"
                },{
                        "_id" : ObjectId("5dc51432c2ac920e04692777"),"data" : "1234"
                }
        ]
}
本文链接:https://www.f2er.com/3140171.html

大家都在问