javascript - Mongoose 反向查找和删除
问题描述
我正在尝试对我的一个collections
. 所以看看引用的对象是否仍然存在,如果不存在,我想_id
在array
我还没有找到任何东西,所以我的想法是得到一个reversed
结果$lookup
是否有可能在 MongoDB 中获得反向查找结果?
这是一个集合的示例及其对集合的taskList
引用tasks
。
tasks
现在我想删除集合中没有现有结果的所有 id 。
我现在如何解决它,这是大量的查询:
- 获取所有的 id
taskList
- 为其中的每一个发送查询,以查看是否与任务集合不匹配
- 发送查询以将该空引用从数组中拉出
解决方案
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
(和其他文档),但不包含taskId7
and taskId8
,则查询将导致nonMatchingTaskIds
包含taskId7
and taskId8
。
这是关于 mongoplayground 的示例:https ://mongoplayground.net/p/75BpiGBJi3Q
推荐阅读
- php - 当 meta_value 保存为序列化键/值时如何使用 WordPress 元查询
- flask - 缺少 1 个必需的位置参数:找不到参数是如何工作的 flask/sqlalchemy
- excel - 电源查询。合并具有折叠值的行中的重复行
- javascript - 文档准备好/加载后如何将自定义 JS 插入 WP
- python - seaborn 动画 - 如何清除/删除以前的数据行
- image-processing - 使用 K-Means 进行图像处理、颜色提取/隔离
- flutter - 将表单字段输入保存到 sqflite DB 后,该条目不会显示在概览屏幕上。它确实在热重载后显示
- css - Bootstrap 4 中的分页问题和刀片模板中的 SimpleQR 代码?
- discord - 当用户加入特定语音频道时运行的命令 discord.py
- atom-editor - 我想在菜单栏的包列表中包含颜料包