gpt4 book ai didi

Mongodb 数组连接

转载 作者:可可西里 更新时间:2023-11-01 10:04:03 26 4
gpt4 key购买 nike

在查询mongodb时,是否可以对结果进行处理(“project”),从而进行数组拼接?我实际上有 2 种不同的情况:

(1) 来自不同领域的数组:,例如:

Given:
{companyName:'microsoft', managers:['ariel', 'bella'], employees:['charlie', 'don']}
{companyName:'oracle', managers:['elena', 'frank'], employees:['george', 'hugh']}

I'd like my query to return each company with its 'managers' and 'employees' concatenated:
{companyName:'microsoft', allPersonnel:['ariel', 'bella','charlie', 'don']}
{companyName:'oracle', allPersonnel:['elena', 'frank','george', 'hugh']}

(2) 嵌套数组:,例如:

Given the following docs, where employees are separated into nested arrays (never mind why, it's a long story):
{companyName:'microsoft', personnel:[ ['ariel', 'bella'], ['charlie', 'don']}
{companyName:'oracle', personnel:[ ['elena', 'frank'], ['george', 'hugh']}

I'd like my query to return each company with a flattened 'personal' array:
{companyName:'microsoft', allPersonnel:['ariel', 'bella','charlie', 'don']}
{companyName:'oracle', allPersonnel:['elena', 'frank','george', 'hugh']}

如果有任何想法,请使用“查找”或“聚合”非常感谢:)

最佳答案

当然,在现代 MongoDB 版本中,我们可以简单地使用 $concatArrays这里:

db.collection.aggregate([
{ "$project": {
"companyNanme": 1,
"allPersonnel": { "$concatArrays": [ "$managers", "$employees" ] }
}}
])

或者对于带有嵌套数组的第二种形式,使用 $reduce组合:

db.collection.aggregate([
{ "$project": {
"companyName": 1,
"allEmployees": {
"$reduce": {
"input": "$personnel",
"initialValue": [],
"in": { "$concatArrays": [ "$$value", "$$this" ] }
}
}
}}
])

$setUnion聚合框架可用的运算符。这里的约束是这些是“集合”,并且所有成员实际上都是“唯一的”,因为“集合”要求:

db.collection.aggregate([
{ "$project": {
"companyname": 1,
"allPersonnel": { "$setUnion": [ "$managers", "$employees" ] }
}}
])

所以这很酷,只要所有都是“唯一的”并且你在奇异数组中。

在替代情况下,您始终可以使用 $unwind$group 进行处理。人员嵌套数组是一个简单的双重展开

db.collection.aggregate([
{ "$unwind": "$personnel" },
{ "$unwind": "$personnel" },
{ "$group": {
"_id": "$_id",
"companyName": { "$first": "$companyName" },
"allPersonnel": { "$push": { "$personnel" } }
}}
])

或者与第一个早于 MongoDB 2.6 的版本相同,其中“集合运算符”不存在:

db.collection.aggregate([
{ "$project": {
"type": { "$const": [ "M", "E" ] },
"companyName": 1,
"managers": 1,
"employees": 1
}},
{ "$unwind": "$type" },
{ "$unwind": "$managers" },
{ "$unwind": "$employees" },
{ "$group": {
"_id": "$_id",
"companyName": { "$first": "$companyName" },
"allPersonnel": {
"$addToSet": {
"$cond": [
{ "$eq": [ "$type", "M" ] },
"$managers",
"$employees"
]
}
}
}}
])

关于Mongodb 数组连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26779391/

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