node.js - 通过 Mongoose 查找限制所选数组的长度

标签 node.js mongodb

这里我有一个文档,其中包含一个数组。看起来像:

var UserSchema = new mongoose.Schema({
    activities:[{
        action:String,
        time:Number,
        extraInfo:{}
    }]
})

现在我想选择这个数组,

UserModel
 .findById(user._id)
 .select('activities')
 .lean()
 .exec((err,user)=>{....})

但我只需要最新的(例如 20 条)事件记录。

有什么办法可以限制选中数组的长度吗?

最佳答案

您可以使用 MongoDB $slice 运算符:https://docs.mongodb.org/manual/reference/operator/projection/slice/#slice-projection

Mongoose 有一个帮助函数来实现这个: http://mongoosejs.com/docs/api.html#query_Query-slice

所以,你的例子变成了这样:

UserModel
  .findById(user._id)
  .slice('activities', 20)
  .select('activities')
  .lean()
  .exec((err,user)=>{....})

关于node.js - 通过 Mongoose 查找限制所选数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36514089/

相关文章:

javascript - MongoDB 聚合使用 $elemMatch 进行嵌套数组

node.js - Mongoose 种群 - 回调与执行

MongoDB 图集触发获取错误 : TypeError: Cannot access member 'db' of undefined

javascript - node.js - 发布响应不等待回调完成

node.js - 为什么经典模块解析无法找到我已安装的模块之一?

javascript - 第一行 Id 值适用于 JSON 对象中的所有行 Id

node.js - Chai/Moka -> TypeError : request. get(...).expect 不是函数

javascript - 在 javascript/node.js 中连接到 Gmail IMAP API

javascript - mypromise.then 内函数的返回值

javascript - 如何强制 Mongoose Save() 调用同步