gpt4 book ai didi

arrays - 在 set mongodb 中拆分数组

转载 作者:行者123 更新时间:2023-12-04 15:00:44 24 4
gpt4 key购买 nike

我一直在尝试制作一组​​字符串 < 或数组 > 但我的主要问题是由于其他数据我无法使用 $unwind。为了更清楚地说明,我将展示一个示例:

这是我的部分文档的样子:

{
"key": [
"a",
"b",
"c"
]
},
{
"key": [
"b",
"d"
]
},
{
"key": [
"e"
]
}

我想得到一个这样的数组:

{
"keys": [
"a",
"b",
"c",
"d",
"e"
]
}

或者这个:

{
"keys": [
["a"],
["b"],
["c"],
["d"],
["e"]
]
}

我只需要其中的唯一值。

如果我可以先使用 $unwind 然后使用 $addToSet,那就太容易了。但正如我之前所说,我不能,因为我需要其他数据。我试图在 $addToSet 中使用 $cond,但我不知道如何遍历数组。

此管道不起作用 ->

db.collection.aggregate([
{
"$group": {
"_id": null,
"keys": {
"$addToSet": {
"$concatArrays": [
"$key",
"$this"
]
}
},

}
}
])

也许是这样的:

  {
"$group": {
"_id": null,
"keys": {
"$addToSet": {
"$cond": {
if: {
"$gt": [
{"$size": "$key"},
1
]
},
then: "<SPLIT THE ARRAY IN THE AMOUNT OF ELEMENTS>",
else: "$key"
}
}
}
}
}

我试过了,但也没用。

db.collection.aggregate([
{
"$project": {
"keys": {
"$map": {
"input": {
"$range": [
0,
{
"$size": "$key"
},
1
]
},
as: "index",
in: {
$slice: [
"$key",
"$$index",
1
]
}
}
}
}
},
{
"$group": {
"_id": null,
"keys": {
"$addToSet": {
"$concatArrays": [
"$keys"
]
}
},

}
}
])

这是我的代码片段:https://mongoplayground.net/p/sMENXyrbQgI有人可以指导我吗!我会非常感激。

最佳答案

所以想法是使用$setUnion连同 $reduce从数组中选择唯一值:

Solution in MongoPlayground

试试这个查询:

db.collection.aggregate([
{
$group: {
_id: null,
"keys": { $push: "$key" }
}
},
{
$addFields: {
"keys": {
$reduce: {
input: "$keys",
initialValue: [],
in: {
$setUnion: ["$$value", "$$this"]
}
}
}
}
}
])

输出:

{
"_id" : null,
"keys" : [
"a",
"b",
"c",
"d",
"e"
]
}

collection中的测试数据:

[
{
"key": [
"a",
"b",
"c"
]
},
{
"key": [
"b",
"d",
"a",
]
},
{
"key": [
"e",
"b"
]
}
]

关于arrays - 在 set mongodb 中拆分数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67007283/

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