0

Facebook IDがデータベースに存在する場合はデータを作成しようとしていますが、そうでない場合は新しいデータを作成しますが、最初の条件は正常に機能しますが、データを作成するときに何も起こらずconnot read property 'provider' of null、プロバイダーの値をハードコードしても取得できません。

db.collection('accounts', function(err, collection){
    collection.findOne({'email': fbEmail}, function(err, item){
        var providerId = item.provider.facebook.id;
        console.log("facebook id should be: "+providerId);
        if(providerId == ""){
            collection.update({email:fbEmail, 'provider.facebook.id':""}, {$set: {"provider.facebook.id": fbId}}, {safe:true}, function(err){
                if(err){
                    console.log(err);
                }else{
                    console.log("id updated!");
                };
            });
        }else{ //creates a new user
            console.log("creating a new account...");
            collection.update({'email': fbEmail}, {
                'email': fbEmail,
                'provider':
                    {
                        'facebook': {'id': fbId},                            
                        'twitter': {'id': ""}                                
                    }                    
            }, {upsert:true}, function(err, doc){
                if(err){
                    console.log("Error finding email "+err);
                }                
            });             
        }
    });
});
4

1 に答える 1

1

accountsコレクション ドキュメントの 1 つ (最初のもの) にはprovider=null. findOneこれを回避するには、次の方法で条件を変更できます。

collection.findOne({'email': fbEmail, 'provider': {$exists: true}}, ...

この変更は、providerフィールドが設定されていない (または に設定されているnull) すべてのアカウントをスキップすることに注意してください。

于 2013-01-23T16:55:21.943 に答える