在 SQL 查询中排除某个字段或将其设为 Null

Exclude a certian field or make it Null inside a AQL query

我有问题。我有一个 collection orders。我想获取所有文档和所有字段,除了 metaData 中的字段 dataOriginSystem。 是否可以选择排除此值或使其为空?

SELECT * EXCEPT(ColumnNameX, [ColumnNameY, ...])
FROM TableA

这是我的 collection orders:

[
{'_id': 'orders/213123',
 'contactEditor': {'name': 'Max Power',
  'phone': '1234567',
  'email': 'max@power.com'},
 'contactSoldToParty': {'name': 'Max Not',
  'phone': '123456789',
  'email': 'maxnot@power.com'},
 'isCompleteDelivery': False,
 'metaData': {'dataOriginSystem': 'Goods',
  'dataOriginWasCreatedTime': '10:12:12',},
 'orderDate': '2021-02-22',
 'orderDateBuyer': '2021-02-22',
},
{'_id': 'orders/12323',
 'contactEditor': {'name': 'Max Power2',
  'phone': '1234567',
  'email': 'max@power.com'},
 'contactSoldToParty': {'name': 'Max Not',
  'phone': '123456789',
  'email': 'maxnot@power.com'},
 'isCompleteDelivery': False,
 'metaData': {'dataOriginSystem': 'Goods',
  'dataOriginWasCreatedTime': '10:12:12',},
 'orderDate': '2021-02-22',
 'orderDateBuyer': '2021-02-22',
 },
]

AQL

FOR doc IN orders RETURN doc

我想要类似的东西

FOR doc IN orders RETURN doc WITHOUT metaData_dataOriginSystem
FOR doc IN orders RETURN doc AND metaData_dataOriginSystem = NULL

所以返回的文档没有字段metaData_dataOriginSystem或者字段应该是Null

我要的(其他字段应该都有!)

[
{'_id': 'orders/213123',
 ...
 'isCompleteDelivery': False,
 'metaData': {<Removed>,
  'dataOriginWasCreatedTime': '10:12:12',},
 ...
},
OR
{'_id': 'orders/12323',
 ...
 'isCompleteDelivery': False,
 'metaData': {'dataOriginSystem': Null,
  'dataOriginWasCreatedTime': '10:12:12',},
 ...
 },
]

使用UNSET() or UNSET_RECURSIVE().

UNSET(document, attributeName1, attributeName2, ... attributeNameN) → doc

从文档中删除属性 attributeName1attributeNameN。将保留所有其他属性。

FOR doc IN orders RETURN UNSET( doc, "orderData", "dataOriginSystem")

如果要删除嵌套值,您需要Merge

FOR doc IN orders RETURN MERGE(doc, {metaData: UNSET(doc.metaData, "dataOriginSystem")})