在处理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('.')
,如果最后一个元素是数字,则它是嵌套的插入,否则是更新或删除。那行得通,尽管我不是很喜欢。
但是似乎没有什么好办法可以区分嵌套的删除和插入。在这个问题上的任何帮助都会很棒。