Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose如何结合查找、排序和_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js Mongoose如何结合查找、排序和

Node.js Mongoose如何结合查找、排序和,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我正在使用socket io编写聊天API。我在数据库中有以下数据结构。当用户A向用户B发送消息时,以下示例{“from”:“A”,“to”:“B”}保存的数据。当用户B响应时,结构如下{“from”:“B”,“to”:“A”} 我需要以某种方式从数据库中获取数据,对于用户A和用户B,并按时间对这些数据进行排序。我正试着用这种方式做这件事。可能会有这样一种情况:只有用户a到B的消息,即如果用户B没有响应 const messages = await Message.find( { $an

我正在使用socket io编写聊天API。我在数据库中有以下数据结构。当用户A向用户B发送消息时,以下示例{“from”:“A”,“to”:“B”}保存的数据。当用户B响应时,结构如下{“from”:“B”,“to”:“A”}

我需要以某种方式从数据库中获取数据,对于用户A和用户B,并按时间对这些数据进行排序。我正试着用这种方式做这件事。可能会有这样一种情况:只有用户a到B的消息,即如果用户B没有响应

const messages = await Message.find( {
    $and: [
      { from: { $eq: req.query.user } },
      { to: { $eq: req.user.name } },
      { from: { $eq: req.user.name } },
      { to: { $eq: req.query.user } }
    ],
    sort:{
      time: -1
    }
  })

您可以使用
$或
运算符查找从“A”到“B”以及从“B”到“A”的消息

sort
方法以降序获取消息

const messages = await Message
  .find(
    {
      $or: [
        { from: { $eq: req.query.user }, to: { $eq: req.user.name } },
        { from: { $eq: req.user.name }, to: { $eq: req.query.user } },
      ],
    },
  )
  .sort({time: 'descending'})
或者您可以使用查询选项

const messages = await Message
  .find(
    {
      $or: [
        { from: { $eq: req.query.user }, to: { $eq: req.user.name } },
        { from: { $eq: req.user.name }, to: { $eq: req.query.user } },
      ],
    },
    null,
    { sort: { time: -1 } }, 
  )

一切正常!非常感谢。
const messages = await Message
  .find(
    {
      $or: [
        { from: { $eq: req.query.user }, to: { $eq: req.user.name } },
        { from: { $eq: req.user.name }, to: { $eq: req.query.user } },
      ],
    },
    null,
    { sort: { time: -1 } }, 
  )