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

MongoDB kopiert ein Feld mit einem Fremdschlüssel in eine andere Sammlung

Es gibt mehrere Probleme mit Ihrer Testeinrichtung:

  • Groß-/Kleinschreibung der Feldnamen stimmt nicht überein (Sie beziehen sich auf color statt Color beim Kopieren)
  • Nur einer der Beispiel-Fremdschlüssel stimmt in der Zielsammlung überein:ObjectId('515f7db83f71d6bcb1c41a48')
  • Ihre Aktualisierung wirkt sich nur auf das erste übereinstimmende Dokument für den "Fremdschlüssel" aus. Für eine 1:1-Beziehung wäre das in Ordnung, aber nicht für eine 1:viele

Ein korrigiertes Beispiel unter Berücksichtigung des Obigen (abgesehen von den nicht übereinstimmenden Schlüsseln):

db.test1.User.find().forEach( 
    function(x) {
        db.test2.Car.update(
            // query 
            { userID: x._id },

            // update 
            { $set: { color: x.Color} },

            // options:
            { "multi" : true } // Update all matching documents
        );
    }
);

Was zur Einstellung von {color:blue} führt für den einzigen Fremdschlüssel, der tatsächlich in den Beispieldokumenten passt:

db.test2.Car.find()
{
    "_id" : ObjectId("515f84883f71d6bcb1c41a55"),
    "speed" : 202,
    "userID" : ObjectId("515f7db83f71d6bcb1c41a49")
}
{
    "_id" : ObjectId("515f84883f71d6bcb1c41a56"),
    "speed" : 193,
    "userID" : ObjectId("515f7db83f71d6bcb1c41a4a")
}
{
    "_id" : ObjectId("515f84883f71d6bcb1c41a54"),
    "color" : "blue",
    "speed" : 291,
    "userID" : ObjectId("515f7db83f71d6bcb1c41a48")
}