如何根据 mongoose 中嵌套 JSON 文档中数组字段的日志日期获取最新日志记录

Posted

技术标签:

【中文标题】如何根据 mongoose 中嵌套 JSON 文档中数组字段的日志日期获取最新日志记录【英文标题】:How to get latest log record based on log date of an array field within a nested JSON document in mongoose 【发布时间】:2021-11-07 22:37:24 【问题描述】:

我有这样的用户架构 const userSchema = new Schema(

电子邮件:字符串, 日志:[logDate:日期,状态:字符串]

日志包含系统的所有用户日志,主要是登录和注销。我想得到 某个用户的最后一个日志状态。然后我想更新那个字段

下面是我的代码。但它会返回所有日志:

User.findOne(email: user.email,logs:status:1, logDate:1, sort:'logs.logDate': -1 , (err, log) = > 如果(错误)

res.send(status: 401, message: 'DB Error') 别的 res.status(200).json(log); );

【问题讨论】:

请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

使用这个聚合

User.aggregate([
  
    "$unwind": "$logs"
  ,
  
    "$match": 
      user: 1,
      "logs.Date": 1,
      "logs.status": 1
    
  ,
  
    $sort: 
      "log.Date": -1
    
  ,
  
    "$limit": 1
  
])
)

https://mongoplayground.net/p/ZDXlIaYsDvD

【讨论】:

我正在使用猫鼬,而您的代码是用于 mongosh 的,但它不起作用。 我不适合我,因为这是一种 mongosh 方法,我正在使用 mongoose。给出的错误是 db is not defined 是的,我拼错了,我更新我的答案,请尝试一下 好的,它正在工作。但是如何更新收到的字段? 您要更新哪个字段?在这个阶段你有 _id 的文档,现在你可以更新它

以上是关于如何根据 mongoose 中嵌套 JSON 文档中数组字段的日志日期获取最新日志记录的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:保存具有不同模式的嵌套 JSON

如何在 Mongoose 的文档中检查重复的嵌套数组?

如何从深度嵌套的文档中 $pull (mongoose)

如何在nestjs mongoose typescript中引用嵌套文档

使用没有数组的嵌套文档为我的 JSON 定义有效的猫鼬模式?

使用 Mongoose 查询嵌套的嵌入文档