代码之家  ›  专栏  ›  技术社区  ›  Jamie Sauve

mongoose findoneandupdate为err和doc返回null(使用jest)

  •  3
  • Jamie Sauve  · 技术社区  · 7 年前

    我使用的是MangoSo的FordOnand更新方法,似乎无法从中得到任何有用的信息。我试过使用调用后返回的查询 updatedUser ),但它又回来了 null ;我也尝试过包含回调参数,但是当我这样做时 无效的 两个都回来 err doc .

    上下文:我正在使用jest构建一个测试套件,并为这个函数编写一个测试。我让函数在测试套件之外的应用程序中工作,虽然我更改了部分函数,但除了添加回调参数外,在findoneandupdate调用中没有任何更改。

    预期行为: “err”或“doc”都不返回null,所以我至少知道发生了什么。

    我和摩卡一起工作过,我在学开玩笑,我还发现了其他一些有趣的事情开玩笑。我从经验中知道,这很可能是我遗漏了一些相当明显的东西,但我很想能够责怪一次其他的东西。:)

    更新user.js:

    const updateUser = async (user) => {
    
      console.log('user in updater:', user);
    
      const updatedUser = await User.findOneAndUpdate(
        { _id: user._id },
        {
          $set: {
            name: user.name,
            email: user.email,
            password: user.password,
            ageRange: user.ageRange,
            gender: user.gender,
    
            accountCreatedAt: user.accountCreateAt,
            meetingPlaces: user.meetingPlaces,
            flags: user.flags,
            tokens: user.tokens,
          }
        },
        { new: true },
        (err, doc) => {
          console.log(err, doc);
        }
      );
    
      //placeholders until I get some kind of usable response from findOneAndUpdate
      return {err: false, res: 'cat'};
    };
    

    终端输出:

     console.log server/db/crud_Users/updateUser.js:8
       user in updater: { _id: 5b1aa9a146b59048dd86dbc2,
         name: 'test',
         email: '24479981326297030000@test.com',
         password: 'testtest',
         ageRange: '1',
         gender: 'Female',
         accountCreatedAt: '2018-06-08T11:06:57-05:00',
         meetingPlaces: [],
         flags: [],
         tokens: [],
         homeLocations: [],
         hostedEvents: [],
         attendingEvents: [],
         __v: 0 }
    
     console.log server/db/crud_Users/updateUser.js:28
       null null
    
     console.log server/db/crud_Users/updateUser.js:32
        updatedUser: null
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Bentaiba Miled Basma Ned Batchelder    6 年前

    谢谢你把这个问题解释得那么好。 MongoDB官方文档中提到 here 那个 findOneAndUpdate 更新集合中与请求匹配的第一个文档并返回原始文档。

    我想两者都是 err doc 为空,因为要更新的文档不在集合中。文档中没有提到 查找和重复日期 如果没有与查询匹配的文档。所以,我试着深入研究。

    我在文档中看到了(你可以了解更多) here )如果参数 upsert 没有提到,需要 false 作为默认值。我在节目中看到如果 更新插入 假的 文件不存在, doc null .

        2
  •  -1
  •   Jamie Sauve    7 年前

    编辑:不正确-请参阅其他答案。我搞清楚了。在它有一个值之前,我异步地返回变量,所以它不是一个 findOneAndUpdate 毕竟是问题。: