匹配具有固定值的实体对

时间:2017-12-12 17:26:29

标签: sesam

是否可以匹配和合并数据集中的实体,其中一个实体具有代码1而另一个实体具有代码2?我尝试使用" merge"来解决这个问题。和" eq","代码","代码" +1,但这会在代码3中合并(这不是我想要的)。

{
  "_id": "sample-data",
  "type": "pipe",
  "source": {
    "type": "embedded",
    "entities": [{
      "_id": "a1",
      "name": "A",
      "code": 1
    }, {
      "_id": "a2",
      "name": "A",
      "code": 2
    }, {
      "_id": "a3",
      "name": "A",
      "code": 3
    }, {
      "_id": "b1",
      "name": "B",
      "code": 1
    }]
  }
}

1 个答案:

答案 0 :(得分:2)

是。使用[“if”]有几种方法可以做到这一点,但我更喜欢使用[“in”]进行简单的比较:

{
  "_id": "merge-sample",
  "type": "pipe",
  "source": {
    "type": "merge",
    "datasets": ["sample-data sd"],
    "equality": [
      ["eq",
        ["in", "sd.code",
          ["list", 1, 2]
        ],
        ["in", "sd.code",
          ["list", 1, 2]
        ]
      ]
    ],
    "identity": "first",
    "strategy": "compact",
    "version": 2
  }
}

在测试数据上运行此操作将导致数据集如下所示:

[
  {
    "$ids": [
      "~:sample-data:a1",
      "~:sample-data:a2",
      "~:sample-data:b1"
    ],
    "sample-data:code": [
      1,
      2
    ],
    "sample-data:name": [
      "A",
      "B"
    ]
  },
  {
    "$ids": [
      "~:sample-data:a3"
    ],
    "sample-data:code": 3,
    "sample-data:name": "A"
  }
]