MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose-Update 'kann den Teil (..) nicht verwenden, um das Element zu durchqueren

Versuchen Sie, den positionsbezogenen $ zu verwenden Betreiber in der Aktualisierung, die ein zu aktualisierendes Element in einem Array identifiziert, ohne die Position des Elements im Array explizit anzugeben, aber dies wird immer nur mit einem Element gleichzeitig übereinstimmen:

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

Aus den Dokumenten , fungiert der positionelle $-Operator als Platzhalter für das erste Element, das mit dem Abfragedokument übereinstimmt, und das Array-Feld muss als Teil des Abfragedokuments erscheinen, daher das Abfragedokument

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

enthält das device Array und wird mit jenen Dokumenten übereinstimmen, in denen das device Array id ist nicht gleich deviceID und der Name ist nicht derselbe wie der Name, den Sie aktualisieren möchten. Dies wird sogar mit Dokumenten übereinstimmen, in denen device Array ist leer.