【问题标题】:Merge subarrays and sort合并子数组并排序
【发布时间】:2021-06-25 09:58:25
【问题描述】:

我有 ReQL 查询

r.table('production_plan')
  .filter(doc => doc.hasFields('messages'))
  .pluck('id', 'nomer','diameter', {'messages': ['date', 'text','username']})

有结果

    {
        "diameter": 160,
        "id": "29aefc95-c701-49ee-abc1-2e1e275abb30",
        "messages": [{
            "date": Fri Jun 25 2021 09:06:47 GMT+00:00,
            "text": "test",
            "username": "John"
        }],
        "nomer": "0038"
    },
    {
        "diameter": 110,
        "id": "e8176c1b-5582-4ab2-80cb-9830de7a4c6b",
        "messages": [{
                "date": Thu Jun 24 2021 12:34:19 GMT+00:00,
                "text": "123",
                "username": "John"
            },
            {
                "date": Thu Jun 24 2021 12:36:10 GMT+00:00,
                "text": "456",
                "username": "Jack"
            },
            {
                "date": Thu Jun 24 2021 12:36:42 GMT+00:00,
                "text": "test1",
                "username": "John"
            },
            {
                "date": Thu Jun 24 2021 12:37:01 GMT+00:00,
                "text": "test2 ????",
                "username": "John"
            }
        ],
        "nomer": "0003"
    }

我想选择按日期排序的最后一次按摩

    {
        "messages": [
            {
                "date": Fri Jun 25 2021 09:06:47 GMT+00:00,
                "text": "test",
                "username": "John",
                
                "diameter": 160,
                "id": "29aefc95-c701-49ee-abc1-2e1e275abb30",
                "nomer": "0038"              
            },

            {
                "date": Thu Jun 24 2021 12:34:19 GMT+00:00,
                "text": "123",
                "username": "John",

                "diameter": 110,
                "id": "e8176c1b-5582-4ab2-80cb-9830de7a4c6b",
                "nomer": "0003"              
            },
            {
                "date": Thu Jun 24 2021 12:36:10 GMT+00:00,
                "text": "456",
                "username": "Jack"

                "diameter": 110,
                "id": "e8176c1b-5582-4ab2-80cb-9830de7a4c6b",
                "nomer": "0003"               
            },
            {
                "date": Thu Jun 24 2021 12:36:42 GMT+00:00,
                "text": "test1",
                "username": "John"

                "diameter": 110,
                "id": "e8176c1b-5582-4ab2-80cb-9830de7a4c6b",
                "nomer": "0003"              
            },
            {
                "date": Thu Jun 24 2021 12:37:01 GMT+00:00,
                "text": "test2 ????",
                "username": "John"

                "diameter": 110,
                "id": "e8176c1b-5582-4ab2-80cb-9830de7a4c6b",
                "nomer": "0003"             
            }
        ],
    }

【问题讨论】:

    标签: rethinkdb reql


    【解决方案1】:

    用幼稚的方式解决

    r.table('production_plan')
      .filter(doc => doc.hasFields('messages'))
      .pluck('id', 'nomer','diameter', {'messages': ['date', 'text','username']})
      .concatMap(v => v('messages').map(msg => ({
        date : msg('date'),
        text : msg('text'),
        username : msg('username'),
        id : v('id'),
        nomer : v('nomer'),
        diameter : v('diameter')
      })))   
      .orderBy(r.desc('date'))
    

    【讨论】: