sql >> Base de Datos >  >> NoSQL >> MongoDB

La actualización de Mongoose 'no puede usar la parte (...) para atravesar el elemento

Intente usar el posicional $ operador en la actualización que identifica un elemento en una matriz para actualizar sin especificar explícitamente la posición del elemento en la matriz, pero esto solo coincidirá con un elemento a la vez:

 User.update(
    { 
        "local.email": user,
        "devices.id": { "$ne": deviceID },
        "devices.name": { "$ne": deviceName }
    }, 
    { 
        "$set": { 
            "devices.$.id": deviceID,
            "devices.$.name": deviceName 
        }
    } 
);

De los docs , el operador posicional $ actúa como marcador de posición para el primer elemento que coincide con el documento de consulta, y el campo de matriz debe aparecer como parte del documento de consulta, por lo tanto, el documento de consulta

"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }

contiene el device array y coincidirá con aquellos documentos donde el device matriz id no es igual a deviceID y el nombre no es el mismo que el nombre que está intentando actualizar. Esto incluso coincidirá con los documentos en los que el device la matriz está vacía.