区分嵌套更新,使用MongoDB更改流插入和删除

时间:2018-12-18 22:30:46

标签: mongodb

在处理Mongo文档中的嵌套数组时,无论是插入,删除还是更新,都将使用db.collection.update()

我遇到的问题是v3.6 +中的新变更流。

我需要一种方法来区分来自collection.watch()的更改事件中的这些操作

示例:

使用文档架构:

{
  id: string,
  array: [{id: string, value: string}]
}

插入到嵌套数组:

collection.updateOne(
    {id: 'some_id'},
    {$push: {'array.$': {id: 'nested_id', value: 'new nested item'} } }
)

更改流将响应:

{
  ...
  operationType: 'update',
  updateDescription: {
    updatedFields: 'array.0': {id: 'nested_id', value: 'new nested item'}
  ... }
}

更新:嵌套数组项:

collection.updateOne(
    {id: 'some_id', 'array.id': 'nested_id'},
    {$set: {'array.$.name': 'new nested name' } }
)

更改流将响应:

{
  ...
  operationType: 'update',
  updateDescription: {
    updatedFields: 'array.0.name': 'new nested name'
  ... }
}

删除嵌套数组项:

collection.updateOne(
    {id: 'some_id'},
    {$pull: {array: {id: 'nested_id'} } }
)

更改流将响应:

{
  ...
  operationType: 'update',
  updateDescription: {
    updatedFields: 'array': [...all items in array besides the one you just pulled]
  ... }
}

我可以看到两种方法来区分这些事件,例如'array.0.name'.split('.'),如果最后一个元素是数字,则它是嵌套的插入,否则是更新或删除。那行得通,尽管我不是很喜欢。

但是似乎没有什么好办法可以区分嵌套的删除和插入。在这个问题上的任何帮助都会很棒。

0 个答案:

没有答案