Проблема в том, что вы проецируете это неправильно.
$project: {'updateDescription.updatedFields' : {$objectToArray: '$updateDescription.updatedFields'}}
должно быть
{$project: { 'updateDescription.updatedFields' : {$objectToArray: '$updateDescription.updatedFields'}, 'documentKey._id': req.body.id }}
Тогда вы go используете регулярное выражение для $ match
{$match: {
$and: [
{ 'documentKey._id': req.body.id },
{'updateDescription.updatedFields.k': {$regex:"^matches"}}
]}
Вот полный рабочий фрагмент:
try{
res.status(200).set({
"connection":"keep-alive",
"cache-control": "no-cache",
"content-type":"application/json"
});
var filter = [
{$project: { 'updateDescription.updatedFields' : {$objectToArray: '$updateDescription.updatedFields'}, 'documentKey._id': req.body.id }},
{$match: {
$and: [
{ 'documentKey._id': req.body.id },
{'updateDescription.updatedFields.k': {$regex:"^matches"}}
]
}
}];
await User.watch(filter).on('change', data => console.log(data.updateDescription.updatedFields))
}catch(err){
res.status(500).send(err);
}
Причина, по которой он не совпадает, заключается в том, что вы используете оператор $ и, и нет «documentKey._id» для сопоставления, так как вы спроецировали его неправильно.