gpt4 book ai didi

java - 删除 map 的所有键都包含在mongodb列表中的位置

转载 作者:行者123 更新时间:2023-12-05 05:32:32 25 4
gpt4 key购买 nike

我有这个:

  • 一个字段,它是一个映射,其中键是 UUID,值是另一个不相关的对象。
  • 应作为参数传递的 UUID 列表。

我想:

从集合中删除所有映射的所有键都包含在 UUID 列表中的文档

对象:

@Document
public class MyClass
{
private Map<UUID, anotherObject> myMap;
}

对于派生查询,我无法访问 UUID,因为没有名称 -> deleteByMyMap...

通过查询,我知道有一种方法可以将 map 转换为数组($expr 和 $objectToArray),但我不知道它是否有意义。

  • 有什么办法吗?
  • 如何才能只访问 map 的键?

最佳答案

这是一种方法,使用聚合管道获取所有符合条件的文档的 _id:

db.collection.aggregate([
{
"$addFields": {
keysOfMap: {
"$map": {
"input": {
"$objectToArray": "$myMap"
},
"as": "item",
"in": "$$item.k"
}
},

}
},
{
"$addFields": {
"difference": {
"$setDifference": [
"$keysOfMap",
[
"63f62530-89b1-439e-bcb3-2c7ab614ecda",
"dcbb1469-3ca0-4547-b7d1-296ba2f0a01d"
]
]
}
}
},
{
"$match": {
difference: []
}
},
{
"$project": {
_id: 1
}
}
])

工作原理:

  1. 首先,将映射转换为数组,然后将该数组映射到键。
  2. 然后计算键数组和 id 列表之间的差异。
  3. 然后所有具有空差异的文档都被拾取并投影它们的 _id。

使用这些 ID,您可以简单地执行以下操作:

db.collection.remove({_id: {$in: [// the list here]}});

Playground for the aggregation.

关于java - 删除 map 的所有键都包含在mongodb列表中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74065548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com