MERN技术栈中如何从数据库中检索最后添加的记录?

我正在使用技术堆栈MERNRedux. 我想知道如何使用moongose. 例如,假设它将是分配给特定用户的订单列表。

我已经在后端完成了一个检索所有记录的查询。它看起来像这样:

const getMyOrders = asyncHandler(async (req, res) => {
  const orders = await Order.find({ user: req.user._id })
  res.json(orders)
})

在前端,订单列表由以下人员提供redux action

export const listMyOrders = () => async (dispatch, getState) => {
  try {
    dispatch({
      type: ORDER_LIST_REQUEST,
    })

    const {
      userLogin: { userInfo },
    } = getState()

    const config = {
      headers: {
        Authorization: `Bearer ${userInfo.token}`,
      },
    }

    const { data } = await axios.get(`/api/orders/myorders`, config)

    dispatch({
      type: ORDER_LIST_SUCCESS,
      payload: data,
    })
  } catch (error) {
    const message =
      error.response && error.response.data.message
        ? error.response.data.message
        : error.message
    dispatch({
      type: ORDER_LIST_FAIL,
      payload: message,
    })
  }
}

最后在reacta组件中显示:

const ProfileScreen = ({ history }) => {
  const dispatch = useDispatch()

  const userDetails = useSelector((state) => state.userDetails)
  const { loading, error, user } = userDetails

  const userLogin = useSelector((state) => state.userLogin)
  const { userInfo } = userLogin

  const orderList = useSelector((state) => state.orderList)
  const { loading: loadingOrders, error: errorOrders, orders } = orderList

  useEffect(() => {
    if (!user || !user.name) {
      dispatch(getUserDetails('profile'))
      dispatch(listMyOrders())
    }
  }, [dispatch, user])

  return (
    <tbody>
      {orders.map((order) => (
        <tr key={order._id}>
          [...]
        </tr>
      ))}
    </tbody>
  )
}

作为该问题的部分解决方案,我自己能够做的是对 API 进行单独的查询,该 API 分别从数据库中检索最近添加的记录。然而,这对我来说并不是一个完全令人满意的解决方案,因为它重复了我已经编写的一些代码。现在我的问题是我是否可以以其他方式做到这一点,以便它可以将最后一个订单交付给另一个react组件?

const getLastOrder = asyncHandler(async (req, res) => {
  const lastOrder = await Order.findOne({})
    .sort({ orderDate: -1 })
    .limit(1)
    .populate('user', 'name email')
  res.json(lastOrder)
})
export const getMyLastOrder = () => async (dispatch, getState) => {
  try {
    dispatch({
      type: ORDER_LAST_REQUEST,
    })

    const {
      userLogin: { userInfo },
    } = getState()

    const config = {
      headers: {
        Authorization: `Bearer ${userInfo.token}`,
      },
    }

    const { data } = await axios.get(`/api/orders/myorders/last`, config)

    dispatch({
      type: ORDER_LAST_SUCCESS,
      payload: data,
    })
  } catch (error) {
    const message =
      error.response && error.response.data.message
        ? error.response.data.message
        : error.message
    dispatch({
      type: ORDER_LAST_FAIL,
      payload: message,
    })
  }
}
const SecondComponent = () => {
  const dispatch = useDispatch()

  const userDetails = useSelector((state) => state.userDetails)
  const { loading, error, user } = userDetails

  const userLogin = useSelector((state) => state.userLogin)
  const { userInfo } = userLogin

  const orderLast = useSelector((state) => state.orderLast)
  const { order } = orderLast

  useEffect(() => {
    if (!user || !user.name) {
      dispatch(getUserDetails('profile'))
      dispatch(getMyLastOrder())
    }
  }, [dispatch, user])

  console.log(orderLast)
  return (
    <section>
     <p>{order._id}</p>
      [...]
    </section>

我将不胜感激任何建议或帮助。

以上是MERN技术栈中如何从数据库中检索最后添加的记录?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>