【问题标题】:Sort Mongodb documents by seeing if the _id is in another array通过查看 _id 是否在另一个数组中对 Mongodb 文档进行排序
【发布时间】:2021-10-24 17:45:17
【问题描述】:

我有两个集合——“用户”和“关注者”。 “Follows”只包含具有“follower”字段和“followee”字段的文档,表示用户何时关注另一个用户。我想要做的是能够查询用户但显示我(或任何发出请求的用户)首先关注的用户。例如,如果我关注用户“5”和“14”,当我搜索用户列表时,我希望用户“5”和“14”位于列表顶部,然后是列表中的其余用户数据库。

如果我首先从“关注”集合中查询我关注的所有用户并获取这些用户 ID 的数组,有没有一种方法可以使用类似 {$in: [userIDs]} 的方式进行排序?我不想过滤掉我不关注的用户,我只想通过首先显示我关注的用户来对列表进行排序。

我为此使用 nodejs 和 mongoose。 任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    回答

    db.users.aggregate([
      {
        $addFields: {
          sortBy: {
            $cond: {
              if: {
                $in: [ "$_id", [ 5, 14 ] ]
              },
              then: 0,
              else: 1
            }
          }
        }
      },
      {
        $sort: {
          sortBy: 1
        }
      },
      {
        $unset: "sortBy"
      }
    ])
    

    Test Here

    如果你不希望你在名单上,那么

    db.users.aggregate([
      {
        $addFields: {
          sortBy: {
            $cond: {
              if: {
                $in: [ "$_id", [ 5, 14 ] ]
              },
              then: 0,
              else: 1
            }
          }
        }
      },
      {
        $sort: {
          sortBy: 1
        }
      },
      {
        $unset: "sortBy"
      },
      {
        $match: {
          "_id": { $ne: 1 }
        }
      }
    ])
    

    Test Here

    如果要先对用户进行排序

    db.users.aggregate([
      {
        $sort: {
          _id: 1
        }
      },
      {
        $addFields: {
          sortBy: {
            $cond: {
              if: {
                $in: [
                  "$_id",
                  [
                    5,
                    14
                  ]
                ]
              },
              then: 0,
              else: 1
            }
          }
        }
      },
      {
        $sort: {
          sortBy: 1,
          
        }
      },
      {
        $unset: "sortBy"
      },
      {
        $match: {
          "_id": {
            $ne: 1
          }
        }
      }
    ])
    

    Test Here

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      相关资源
      最近更新 更多