MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB copia um campo para outra coleção com uma chave estrangeira


Há vários problemas com sua configuração de teste:
  • O caso dos nomes dos campos não corresponde (você está fazendo referência a color em vez de Color ao copiar)
  • Apenas um dos exemplos de chaves estrangeiras corresponde à coleção de destino:ObjectId('515f7db83f71d6bcb1c41a48')
  • Sua atualização afetará apenas o primeiro documento correspondente para a "chave estrangeira". Isso seria bom para um relacionamento 1:1, mas não para um relacionamento 1:muitos

Um exemplo corrigido levando em consideração o acima (além das chaves não correspondentes):
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
        );
    }
);

O que resulta na configuração de {color:blue} para a única chave estrangeira que realmente corresponde nos documentos de amostra:
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")
}