update sub schemas objects findbyidandupdate complex array node.js mongodb mongoose

node.js - sub - Mongoose update ''no puede usar la parte(..) para atravesar el elemento



sub schema mongoose (2)

Intente usar el operador $ posicional 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 } } );

Desde los documentos , el operador $ posicional actúa como un 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 la matriz de device y coincidirá con aquellos documentos en los device id matriz de device no sea igual a deviceID de deviceID y el nombre no sea el mismo que el nombre que está intentando actualizar. Esto incluso coincidirá con los documentos donde la matriz de device está vacía.

Tengo este problema realmente molesto en el que no puedo actualizar nada usando la mangosta. Es realmente frustrante de usar, y la documentación no ayuda en absoluto.

Tengo este esquema:

var userSchema = mongoose.Schema({ local : { email : String, password : String, }, devices : [{ id : String, name : String }] });

Y este es el código donde quiero agregar un dispositivo a los devices matriz:

function updateDeviceList(user, deviceID, deviceName) { User.update({ ''local.email'' : user}, { $set: {''devices.id'' : deviceID, ''devices.name'' : deviceName}}, function(err, response) { if(err) { console.log("Update device error", err); } else { console.log("Update device OK"); } }); }

En este punto recibo el error: errmsg: ''cannot use the part (devices of devices.id) to traverse the element ({devices: []})'' }

No logré encontrar una explicación de por qué esto está sucediendo. Tengo que mencionar que el documento (hay casi un solo documento en la base de datos), es este:

{ "_id": { "$oid": "5585a196fe11b21100635c74" }, "devices": [], "local": { "password": "$2a$10$7hXVHw7izcYlqbD6xe/te.0w2zucZ7lA007g9kXdoIMPhZhRyCIru", "email": "[email protected]" }, "__v": 0 }