jq:根据两个键嵌套对象

jq: nesting objects according to two keys

这是我的文件:

{
   "name":"name1",
   "oid1":"oid1-1",
   "oid2":"oid2-1"
}{
   "name":"name2",
   "oid1":"oid1-2",
   "oid2":"oid2-2"
}

对方:

{
  "id": "id1",
  "info": "info1",
  "oid1":"oid1-1",
  "oid2":"oid2-1"
}
{
  "id": "id2",
  "info": "info2",
  "oid1":"oid1-1",
  "oid2":"oid2-1"
}
{
  "id": "id3",
  "info": "info3",
  "oid1":"oid1-2",
  "oid2":"oid2-2"
}

我需要将上面的文档嵌套到第一个文档中:

{
   "name":"name1",
   "oid1":"oid1-1",
   "oid2":"oid2-1",
   "ids":[
      {
         "id":"id1",
         "info":"info1"
      },
      {
         "id":"id2",
         "info":"info2"
      }
   ]
}{
   "name":"name2",
   "oid1":"oid1-2",
   "oid2":"oid2-2",
   "ids":[
      {
         "id":"id3",
         "info":"info3"
      }
   ]
}

因此,我需要嵌套到第一个文档中,即 parent.oid1 == nest.oid1 && parent.oid2 == nest.oid2

我没去过合理的地方。

有什么想法吗?

如果“我的文档”存储在名为 mine.json 的文件中,而“另一面”是文件 others.json 的内容,则 --slurpfile 其他文件并添加它们基于 select:

jq --slurpfile others others.json '
  . as $mine
  | . + {ids: ($others | map(          
    select(.oid1 == $mine.oid1 and .oid2 == $mine.oid2)
    | {id, info}
  ))}
' mine.json
{
  "name": "name1",
  "oid1": "oid1-1",
  "oid2": "oid2-1",
  "ids": [
    {
      "id": "id1",
      "info": "info1"
    },
    {
      "id": "id2",
      "info": "info2"
    }
  ]
}
{
  "name": "name2",
  "oid1": "oid1-2",
  "oid2": "oid2-2",
  "ids": [
    {
      "id": "id3",
      "info": "info3"
    }
  ]
}

Demo(使用具有字段 mineothers 的对象而不是文件)