Скопируйте поле из одной коллекции в другую в mongodb с внешним ключом как смешанный тип - PullRequest
0 голосов
/ 12 ноября 2018

Хотя я нашел похожий вопрос по stackOverFlow MongoDB, скопируйте поле в другую коллекцию с внешним ключом

Я хочу скопировать поле name из коллекции userdetails вuser коллекция, где userId в userDetails равен _id для пользователя.

пользователь коллекция

{                                                                                                                                                                                                            
  "_id" : ObjectId("5b97743bbff66e0be66283cc"),                                                                                                                                                       
  "username" : "mmi_superadmin",                                                                                                                                                                                     
  "accId" : "acc1"                                                                                                                                                                  
}                                                                                                                                                                                                    
{                                                                                                                                                                                                            
  "_id" : "c21d580ea3ca5c7a1664bd5feb57f0c8",                                                                                                                                                             
  "username" : "client",                                                                                                                                                                               
  "accId" : "acc1"                                                                                                                                                               
}  

userDetail коллекция

{
  "_id" : ObjectId("5b97743bbff66e0be66283cd"),                                                                                                                                                    
  "userId" : "5b97743bbff66e0be66283cc",                                                                                                                                                         
  "name" : "mmi_superadmin"                                                                                                                                                                    
}                                                                                                                                                                                                    
{                                                                                                                                                                                                            
  "_id" : "5bab8a60ef86bf90f1795c44",                                                                                                                                                                  
  "userId" : "c21d580ea3ca5c7a1664bd5feb57f0c8",                                                                                                                                                                                                                                                                                                                        
  "name" : "RAHUL KUMAR TIWARI"                                                                                                                                                                       
}    

Вот мой запрос:

db.userDetails.find().forEach(
function(x) {
  db.user.update( {_id :x.userId}, {$set: {name:x.name}});
}
);

Этот запрос частично работает.Он обновляет только user документы, в которых _id имеет тип string.Пользовательский документ с _id в качестве ObjectId не обновляется.

1 Ответ

0 голосов
/ 12 ноября 2018

Пожалуйста, проверьте ваши документы _id (потому что в вашем примере некоторые _id не являются действительными документами _id. Например c21d580ea3ca5c7a1664bd5feb57f0c8 не mongo _id) и используйте этот запрос:

let usersIds = [];
db.user.find({"_id": {$type: 7}}).forEach(doc => {
    usersIds.push(doc._id + '')

    db.userDetail.find({
        userId: {
            $in: usersIds
        }
    }).forEach(doc => {
        db.user.update(
            {
                "_id": ObjectId(doc.userId)
            },
            {
                $set: {
                    "name": doc.name
                }
            },
            { 
                multi: false,
                upsert: false
            }
        )
    })

})

если у вас есть какие-либо вопросы, не стесняйтесь спрашивать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...