mongoose findOne先查找,没有找到的话就保存

发布于 2022-09-05 06:12:16 字数 628 浏览 15 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

自在安然 2022-09-12 06:12:16

findone方法都没有调用?是不是jsLib对象引入的有问题呢?看看命令窗口有没有错误输出。

叫思念不要吵 2022-09-12 06:12:16

你这代码,看起来是没问题吧.
不过我有个疑问,你怎么知道,JsLib.findOne这个方法没执行呢?不管怎样,只要你调用了store2db这个函数,并且libObj.length大于0,都会执行啊,当然,执行不成功,会报错.
如果执行成功,那么应该会进入到findOne的回调.但是,当findOne查询到数据时,是什么都不会输出的,这就有可能看起来像是findOne的回调函数没执行.
你先确定你的数据库中的数据是否正确吧.看看findone是否有查询到数据.
毕竟,你这样的写法,如果相同的数据,只能测试一次(第二次测试时,数据已经存在,所以没有输出,也没有更新数据).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文