NodeJS 如何查找objectId类型的key,请参考〈某型号>

b91juud3  于 2023-02-03  发布在  Node.js
关注(0)|答案(2)|浏览(152)

我已经创建了一个具有如下所示模式的Notes模型

const notesschema = new Schema({
user :{
    type : Schema.Types.ObjectId,
    ref : 'User',
    required : true
},
problem : {
    type : Schema.Types.ObjectId,
    ref : 'Problems',
    required : true
},
content : {
    type : 'string'
}
 },{
timestamps : true
})

为了向用户显示他对特定任务/问题的笔记,我尝试获取笔记并向他显示,如果他做了一些更改并保存,可能会更新,问题是这个模式我不知道如何编写<model.findById >API来从我的笔记模型中查找具有特定用户和特定任务/问题的笔记。我知道ID。
有了这个特殊的模式,和我目前的知识,我将不得不写这么多的代码。所以如果有任何更简单的方法来做这个任务是受欢迎的,
我还想更改我的模式,只是将我的用户ID放在我的模式中,而不是整个用户,然后从数据库中查找注解
编辑:正如所有答案所建议的,我们可以简单地使用www.example.com来查找user.id,我最初认为这不是单词,因为这只是路径,但它实际上存储了user.id

c7rzv4ha

c7rzv4ha1#

创建notes集合的方法和现在一样,

const notesSchema = new mongoose.Schema({
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User', // # the name of the user model
    required: true
  },
  problem: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Problem', // # the name of the user model
    required: true
  },
  content: String
})

然后,您将创建notesSchema的模型,如下所示:

const NoteModel = mongoose.model('Note', notesSchema, 'notes')

导出它们,以便可以在控制器中使用它们:

module.exports = {
  NoteModel,
  notesSchema
}

,如果您使用+es6模块(想想看,如果您使用TypeScript):

export default {
  NoteModel,
  notesSchema
}

这将导致在数据库中创建以下表(collection):

让我们考虑以下挑战:

获取所有注解:

NoteModel.find({})

获取所有用户:

UserModel.find({}) // you should have something like this in your code of course

解决所有问题:

ProblemModel.find({}) // you should have something like this in your code of course

获取用户的所有注解:

NotesModel.find({ user: USER_ID })

按问题 * 搜索注解:

NotesModel.find({ problem: PROBLEM_ID })

现在,上面是你如何在mongoose中做到这一点,现在让我们为所有这些创建一个RESTFUL控制器:(假设您使用的是express)

const expressAsyncHandler = require('express-async-handler') // download this from npm if you want
app.route('/notes').get(expressAsyncHandler(async (req, res, next) => {
  const data = await NotesModel.find(req.query)
  res.status(200).json({
    status: 'success',
    data,
  })
}))

req.query将包含搜索过滤器,搜索过滤器将由客户端(前端)发送,如下所示:

http://YOUR_HOST:YOUR_PORT/notes?user=TheUserId
http://YOUR_HOST:YOUR_PORT/notes?problem=TheProblemId
http://YOUR_HOST:YOUR_PORT/notes?content=SomeNotes
4c8rllxm

4c8rllxm2#

const notesschemaOfUser = await notesschema.findOne({user: user_id});

相关问题