如果它是一个数组,如何连接字符串数组字段以显示为一个字符串
How to concatenate string array field to show as one string if its an array
以下是我collection中的两个文档:
{
"_id": {
"$oid": "5f48e358d43721376c397f54"
},
"heading": "this is heading",
"tags": ["tag1","tag2","tag3"],
"categories": ["projA", "projectA2"],
"content": ["This", "is", "the", "content", "of", "the", "document"],
"timestamp": 1598612312.506219,
"lang": "en"
}
和
{
"_id": {
"$oid": "5f48e358d43721376c397f53"
},
"heading": "this is heading",
"tags": "tag1,tag2,tag3",
"categories": "projA, projectA2",
"content": "This is the content of the document",
"timestamp": 1598612312.506219,
"lang": "en"
}
我想编写一个查询,连接第一个文档的 content
元素并按原样打印第二个(因为它不是数组)。
我正在使用以下脚本来连接,但它在第二个文档上给出了错误,说它需要是一个数组,但事实并非如此。我不知道如何在这种情况下使用 switch 语句或嵌套 if 条件:
"$addFields": {
content: {
"$reduce": {
"input": "$content",
"initialValue": "",
"in": {
"$cond": {
"if": { "$eq": [ { "$indexOfArray": [ "$content", "$$this" ] }, 0 ] },
"then": { "$concat": [ "$$value", "$$this" ] },
"else": { "$concat": [ "$$value", "\n", "$$this" ] }
}
}
}
}
}
我是 mongo 数据库的新手,因此我们将不胜感激。
你可以试试,
$cond
检查内容类型是否为数组,$reduce
连接内容字符串,$trim
删除白色 space
db.collection.aggregate([
{
$addFields: {
content: {
$cond: [
{ $eq: [{ $type: "$content" }, "array"] },
{
$trim: {
input: {
$reduce: {
input: "$content",
initialValue: "",
in: { $concat: ["$$value", " ", "$$this"] }
}
}
}
},
"$content"
]
}
}
}
])
以下是我collection中的两个文档:
{
"_id": {
"$oid": "5f48e358d43721376c397f54"
},
"heading": "this is heading",
"tags": ["tag1","tag2","tag3"],
"categories": ["projA", "projectA2"],
"content": ["This", "is", "the", "content", "of", "the", "document"],
"timestamp": 1598612312.506219,
"lang": "en"
}
和
{
"_id": {
"$oid": "5f48e358d43721376c397f53"
},
"heading": "this is heading",
"tags": "tag1,tag2,tag3",
"categories": "projA, projectA2",
"content": "This is the content of the document",
"timestamp": 1598612312.506219,
"lang": "en"
}
我想编写一个查询,连接第一个文档的 content
元素并按原样打印第二个(因为它不是数组)。
我正在使用以下脚本来连接,但它在第二个文档上给出了错误,说它需要是一个数组,但事实并非如此。我不知道如何在这种情况下使用 switch 语句或嵌套 if 条件:
"$addFields": {
content: {
"$reduce": {
"input": "$content",
"initialValue": "",
"in": {
"$cond": {
"if": { "$eq": [ { "$indexOfArray": [ "$content", "$$this" ] }, 0 ] },
"then": { "$concat": [ "$$value", "$$this" ] },
"else": { "$concat": [ "$$value", "\n", "$$this" ] }
}
}
}
}
}
我是 mongo 数据库的新手,因此我们将不胜感激。
你可以试试,
$cond
检查内容类型是否为数组,$reduce
连接内容字符串,$trim
删除白色 space
db.collection.aggregate([
{
$addFields: {
content: {
$cond: [
{ $eq: [{ $type: "$content" }, "array"] },
{
$trim: {
input: {
$reduce: {
input: "$content",
initialValue: "",
in: { $concat: ["$$value", " ", "$$this"] }
}
}
}
},
"$content"
]
}
}
}
])