mongoose 如何从字体末尾按对象ID搜索

oiopk7p5  于 2023-01-31  发布在  Go
关注(0)|答案(1)|浏览(97)

我有一个叫做“餐”的集合,里面有这样一个文档:

# Meals collection
{
   name: "burger",
   tag: ObjectId(63d6bb22972f5f2fa97f1506),
}

现在我进入了React应用程序,我想向后端API发送一个查询,
所以我提出了一个请求,看起来 * 基本上 * 如下:

const tagId = "63d6bb22972f5f2fa97f1506"
const queryString = `http://localhost:3001/v1/meals?tag=${tagId}`
sendQuery(queryString)

这个查询是对服务器进行的,如下所示,遵循RESTful模式:

http://localhost:3001/v1/meals?tag=63d6bb22972f5f2fa97f1506

在后端,我传递搜索参数如下:

// # nodejs server-side
// # using expressjs
// # and using mongoose
api.get('/meals', async (req, res, next)=> {
 const res = await MealModel.find(req.query) // req.query = { tag: "63d6bb22972f5f2fa97f1506" }
  res.status(200).json({
    status: 'success'
    data: res
  })
})

但是,查询什么也不返回,[]
因为tag类型实际上是一个对象ID,而不是字符串,
req.query.tag是字符串,而不是对象ID。
如何通过JSON将对象ID从前端发送到后端?
听起来很疯狂,对吧?有什么解决办法?

hgtggwj0

hgtggwj01#

const mongoose = require("mongoose")

api.get('/meals', async (req, res, next)=> {
 const response = await MealModel.find({tag:mongoose.Types.ObjectId(req.query.tag)})
  res.status(200).json({
    status: 'success'
    data: response
  })
})

如果你的Meals集合中只有一个文档,那么使用findOne,你的查询会执行得更快。2请告诉我它是否有效。3希望它能有所帮助。

相关问题