node.js - Mongoose 仅​​返回文档嵌套数组中的一个元素

标签 node.js mongodb mongoose

我想获取文档数组中的一个单个元素,而不获取整个数组本身。使用 Mongoose 可以做到这一点吗?

我尝试使用dot.notation但它似乎不起作用 - 它只是在“索引点”之后获取空的嵌套对象

  // Here I'd like to get 
  // The first undo-ed item from the first board within my `boardBucket`

  Room.findOne({name: this.name}, `boardBucket.items.0.undoedItems.1`, (err, result)=> {
    if (err) throw err;
    console.log(JSON.stringify(result, null, 4));
  })

有什么办法可以实现这一点吗?

我想避免获取整个数组的原因

  • 我的对象非常大,如果我将它们全部取回,将会导致内存问题
  • 无论怎么看,它的效率都很低。

这是我的架构,以防有帮助:

var roomSchema = new mongoose.Schema({
    name: String,
    boardBucket: {
      currentBoardId: String,
      items: [
        {
          boardId: String,
          boardItems: Array,
          undoedItems: Array, // <- Need to get a *single* element from this array
          viewPosition: String
        }
      ]
    }
});

最佳答案

您可以使用 mongoose 提供的queryslice功能。浏览mongoose documentation on slice为了更好地理解。

According to the documentation:

slice([path], val)

Specifies a $slice projection for an array.

Parameters:

[path] <String>
val <Number> number/range of elements to slice

尝试解决您的问题,我希望它有效:

Room.findOne({name: this.name})
    .slice('boardBucket.items', 1)
    .slice('boardBucket.items.undoedItems', [1,1])
    .exec()

这将返回 items 数组的第一个元素,以及 undoedItems 的第二个元素。

关于node.js - Mongoose 仅​​返回文档嵌套数组中的一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39025944/

相关文章:

javascript - Node.js/Javascript 在 JSON 对象数组中搜索

node.js - Mongoose 在更新时覆盖字段

mongodb - 如何对数据进行分组并在 mongodb 中获取和获取所有字段

node.js - Neo4j中根据Where条件插入数据

node.js - 在 typescript 中使用 Electron API

javascript - 在 MongoDB 中插入上一个查询的结果返回语法错误

mongodb - Laravel + Mongodb 全文搜索

node.js - 在 Typescript Node+Express 项目中使用模块中的 TypeScript 文件的正确方法?当前抛出错误 : Cannot find module

javascript - MongoDB - 仅在嵌套数组中存在时更新所有条目

javascript - 注册后 req.user 未定义