Обновление вложенного объекта не вызывает событие changeFeed - PullRequest
0 голосов
/ 22 мая 2018

У меня есть таблица Users, которая содержит поле аватара.Это поле является объектом, пример:

{
    "file": {
        "identifier":  "fafa2570-d642-4c78-912a-f275b70abed9" ,
        "mimeType":  "image/jpeg" ,
        "name":  "fafa2570-d642-4c78-912a-f275b70abed9.jpg"
    }
}

По умолчанию, когда я создаю пользователя, поле аватара не существует.Я не могу запустить действие, если поле аватара обновлено.Я пытался:

rethinkdb.table(USER_TABLE_NAME)
.changes()
.filter(rethinkdb.row('old_val')('avatar').ne(rethinkdb.row('new_val')('avatar')))
.run((err, change) => {
    change.each((changeErr, { new_val }) => {
        // do my actions here ...
    });
});

Знаете ли вы хороший запрос, чтобы получить то, что я хочу?Большое спасибо :)!

1 Ответ

0 голосов
/ 22 мая 2018

Я нашел способ:

rethinkdb.table(USER_TABLE_NAME)
.changes()
.filter(
    (
        rethinkdb.row('old_val').hasFields({ avatar: true }).not()
        .and(rethinkdb.row('new_val').hasFields({ avatar: true }))
    )
    .or(
        rethinkdb.row('old_val').hasFields({ avatar: true })
        .and(rethinkdb.row('new_val').hasFields({ avatar: true }).not())
    )
    .or(
        rethinkdb.row('old_val')('avatar')('file')('identifier')
        .ne(rethinkdb.row('new_val')('avatar')('file')('identifier'))
    )
)
.run((err, change) => {
    change.each((changeErr, { new_val }) => {
        // do my actions here ...
    });
});

Это довольно тяжело, но оно делает свою работу.

...