Javascript mongo本机未创建数据
如果数据库中存在facebook id,我会尝试创建数据,否则会创建新数据,但是第一个条件可以正常工作,但是当创建数据时,什么都不会发生,ony getJavascript mongo本机未创建数据,javascript,node.js,mongodb,express,node-mongodb-native,Javascript,Node.js,Mongodb,Express,Node Mongodb Native,如果数据库中存在facebook id,我会尝试创建数据,否则会创建新数据,但是第一个条件可以正常工作,但是当创建数据时,什么都不会发生,ony get无法读取null的属性“provider”甚至我硬编码了一个provider值 db.collection('accounts', function(err, collection){ collection.findOne({'email': fbEmail}, function(err, item){ var provi
无法读取null的属性“provider”
甚至我硬编码了一个provider值
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);
}
});
}
});
});
科目
收款凭证中的一个(第一个)具有provider=null
。您可以通过以下方式修改findOne
条件以避免它:
collection.findOne({'email': fbEmail, 'provider': {$exists: true}}, ...
请注意,此修改只会跳过所有未设置
provider
字段集(或设置为null
)的帐户。在findOne
回调中,在检查item
之前,您需要检查item
是否为null<如果这是一封新电子邮件,则code>项将为空
。很抱歉,如果我没有完全理解您的笔记,我仍需要执行第一次收集。当提供商中的facebook id为空
时更新
,但是如果我跳过所有没有provider
字段设置的帐户,那么我不确定如何再次执行上述操作。我想我解决了它=)只需将创建新电子邮件放在findOne
之外,并使用{$exists:true}
如您所说,谢谢!我写这张便条的目的是警告你,如果没有提供提供者的话。不管怎样,我很高兴你解决了这个问题。不客气!实际上仍然存在一个问题,如果电子邮件不存在,我仍然需要创建新数据,查看mongodb查询文档……在这种情况下,我通常获取帐户(findOne
)(如果存在),然后处理或创建检索到的对象,最后保存(save(usert=true)
)它。