我一直在尝试创建一个字符串或数组的集合,但我的主要问题是由于其他数据的原因无法使用$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。能否有人指导一下我?非常感谢。