首页 > 解决方案 > Mongoose 反向查找和删除

问题描述

我正在尝试对我的一个collections. 所以看看引用的对象是否仍然存在,如果不存在,我想_idarray

我还没有找到任何东西,所以我的想法是得到一个reversed结果$lookup

是否有可能在 MongoDB 中获得反向查找结果?

这是一个集合的示例及其对集合的taskList引用tasks

tasks现在我想删除集合中没有现有结果的所有 id 。

我现在如何解决它,这是大量的查询:

  1. 获取所有的 idtaskList
  2. 为其中的每一个发送查询,以查看是否与任务集合不匹配
  3. 发送查询以将该空引用从数组中拉出

标签: javascriptnode.jsmongodbreference

解决方案


Afaik 除了您描述的以外,没有其他方法可以达到预期的结果,但是您可以大大简化查找不匹配项目的第二步。事实上,这是taskList-ids 和现有task-ids 之间的差异。

因此,您可以使用$setDifference-运算符来计算该差异:

db.tasks.aggregate([
  {
    $group: {
      _id: "null",
      ids: {
        "$addToSet": "$_id"
      }
    }
  },
  {
    $project: {
      nonMatchingTaskIds: {
        $setDifference: [
          [
            "taskId1",
            "taskId2",
            "taskId7",
            "taskId8"
          ],
          "$ids"
        ]
      }
    }
  }
])

假设您的tasks集合包含taskId1, task2(和其他文档),但不包含taskId7and taskId8,则查询将导致nonMatchingTaskIds包含taskId7and taskId8

这是关于 mongoplayground 的示例:https ://mongoplayground.net/p/75BpiGBJi3Q


推荐阅读