当前位置: 首页 > 知识库问答 >
问题:

Mongoose-不能调用findOneAndUpdate后挂钩中的model.find()

姚星河
2023-03-14

摘要

在Mongoose中有一个post findOneAndUpdate钩子,在这个钩子里面我需要查询数据库。我正试图在另一个模型上执行。find(),但是每次我都得到以下错误:

误差

TypeError: Users.find is not a function
    at model.Query.<anonymous> (/Users/benjilightstone/Coding/eSports-node-RESTful-API/api/models/fortniteUsers.js:29:32)
const mongoose = require("mongoose");
const Users = require("./users");
const uniqueValidator = require("mongoose-unique-validator");
const statsFieldsSchema = require("./statsFields");

const fnUserPlatformSchema = {
  //this is so that have a unique entry for a username &platform combo
  fnUser: { type: String, require: true },
  platform: { type: String, enum: ["pc", "xb1", "psn"], require: true }
};
//TODO took out updated at because the record shouldn't get updated?
//TODO think about usecase of Fortnite user changing their username

const fortniteUserSchema = mongoose.Schema({
  // pass a javascript object that defines the schema
  fnUserPlatform: { type: fnUserPlatformSchema, unique: true, require: true },
  createdAt: { type: Date, require: true },
  hasAccount: { type: Boolean, require: true, default: false },
  updatedAt: { type: Date, require: false },
  lifeTimeStats: { type: statsFieldsSchema, require: true }
});

fortniteUserSchema.post("findOneAndUpdate", async function(fortniteUser, next) {
  try {
    console.log("inside fortniteUser post hook", typeof fortniteUser._id);
    const fnUserId = String(fortniteUser._id);
    console.log("fnUserId", fnUserId);
    // const userId = await User.find({ fnUser: fnUserId });
    const userId = await Users.find({ fnUser: "5ccb08198f52f40117e950b3" });
    console.log("userId", userId);
  } catch (err) {
    console.log("error in post hook", err);
  }
});

fortniteUserSchema.plugin(uniqueValidator);

module.exports = mongoose.model("FortniteUser", fortniteUserSchema);
const mongoose = require("mongoose");
const FortniteUsers = require("./fortniteUsers");
require("mongoose-type-email");

const userSchema = mongoose.Schema({
  // pass a javascript object that defines the schema
  fnUser: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "FortniteUser",
    require: true
  },
  eSportsUsername: { type: String, require: true },
  password: { type: String, require: true, minlength: 5 },
  email: { type: mongoose.SchemaTypes.Email, require: true, unique: true },
  ageConfirmed: { type: Boolean, require: true },
  createdAt: { type: Date, require: true },
  updatedAt: { type: Date, require: false }
});

userSchema.pre("save", function() {
  console.log("inside pre save users.js");
  console.log("docToSave", this); // QUESTION:  how would I pass in req.body.fnUser
  FortniteUsers.findOne({
    fnUserPlatform: { username: req.body.fnUser, platform: "psn" }
  })
    .then(result => {
      console.log("result in pre", result);
    })
    .catch(err => console.log("error i expect", err));
});

userSchema.post("save", function(user) {
  //TODO where is user gettting passed from, I dont really understand this
  console.log("we're in post save ... ", user);

  FortniteUsers.findOneAndUpdate(
    { _id: user.fnUser },
    { $set: { hasAccount: true } },
    function(err, doc) {
      if (err) {
        console.log("error in mongoose userSchema.post", err);
      }
    }
  );
});

module.exports = mongoose.model("User", userSchema);

共有1个答案

穆智刚
2023-03-14

看起来,问题是因为您需要fortniteusersusers,所以当调用其中一个时,不会导出另一个。

要验证这一点,您可以在require之后console.log(FortniteUsers)console.log(Users)。您可以看到FortniteUsers模型{FortniteUsers},但Users只是{}

您可以通过将这一行const FortniteUsers=require(“./FortniteUsers”);移到users.js中的导出之后来解决这个问题(不确定这是好方法,但它很管用)。

 类似资料:
  • 我是反应的初学者。我试图将我的数据库的值从一个文件发送到另一个使用反应挂钩,并得到以下错误有人能帮我吗? 第5:41行:不能在顶层调用React钩子“useState”。必须在React函数组件或自定义React钩子函数React钩子/钩子规则代码中调用React钩子:

  • 获取以下错误。请帮忙。第9:36行:不能在类组件中调用React钩子“useContext”。必须在React函数组件或自定义React钩子函数中调用React钩子。React钩子/钩子规则第9:47行:“AccountContext”未定义未定义未定义第126:37行:“switchToSignup”未定义未定义未定义 搜索关键字以了解有关每个错误的更多信息。

  • 从 react 导入 useState,将其粘贴到正文函数,但 react 告诉我错误的使用钩子。虽然另一个钩子像这样工作。

  • 问题内容: 我是React的新手,现在我想在表中显示一些记录,现在出现此错误。请帮帮我。 无效的挂接调用。挂钩只能在功能组件的主体内部调用。发生这种情况可能是由于以下原因之一:1.您的React和渲染器版本可能不匹配(例如React DOM)2.您可能违反了《胡克规则》 3.您可能在其中包含多个React版本相同的应用程序请参阅有关如何调试和解决此问题的提示。 问题答案: 因为你。在此处查看更多信

  • 为了学习平均堆栈(使用Mongoose),我创建了一个StackOverflow类型的应用程序。我有存储在Mongo(v3.0.7)中的问题,它们有答案子文档。 我试图增加一个答案的投票数,但当问题返回时,它是空的。我非常肯定查询有问题,特别是我试图用需要修改的ID得到答案的地方。 查询0票有效: 更新:通过Mongo查询,返回结果: 但是,通过Mongoose返回NULL:

  • 问题内容: React.js为动画提供了一个低级API,称为ReactTransitionGroup。在文档中指出,对钩,和,一个回调函数作为参数传递。 我的问题是,此回调究竟是什么以及如何传递给这些钩子,文档没有对这些回调进行任何说明,只是将动画延迟到调用之前。 问题答案: 首先,我也仍在学习ReactJS,所以我的方法可能有错误,而没有错误。为此提前致歉。 打开“开发人员工具”的窗口,分析我刚