mongoose findOne先查找,没有找到的话就保存
function store2db(libObj){
console.log(libObj);
for (var i = 0; i < libObj.length; i++) {
var jsLib = new JsLib({
name: libObj[i].lib,
libsNum: libObj[i].num
});
// 调试发现,这里不会运行,如果没找到的话,libDoc应该是Null,应该会运行这一步的啊
JsLib.findOne({'name': libObj[i].lib,'libsNum': libObj[i].num},function(err,libDoc){
if(err) console.log(err);
// console.log(libDoc)
if (!libDoc){
jsLib.save(function(err,result){
if(err) console.log('保存数据出错' + err);
});
}
})
}
}
为什么findOne函数的回调不会执行呢,按理来说,没有找到的话,应该保存到数据的啊~还没找到解决方案,求助大家。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
findone方法都没有调用?是不是jsLib对象引入的有问题呢?看看命令窗口有没有错误输出。
你这代码,看起来是没问题吧.
不过我有个疑问,你怎么知道,JsLib.findOne这个方法没执行呢?不管怎样,只要你调用了store2db这个函数,并且libObj.length大于0,都会执行啊,当然,执行不成功,会报错.
如果执行成功,那么应该会进入到findOne的回调.但是,当findOne查询到数据时,是什么都不会输出的,这就有可能看起来像是findOne的回调函数没执行.
你先确定你的数据库中的数据是否正确吧.看看findone是否有查询到数据.
毕竟,你这样的写法,如果相同的数据,只能测试一次(第二次测试时,数据已经存在,所以没有输出,也没有更新数据).