Mongoose只从文档的嵌套数组中返回一个元素

时间:2016-08-18 19:17:43

标签: 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));
  })

有没有办法实现这个目标?

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

  • 我的对象非常大,如果我把它们全部拿回来会导致内存问题
  • 无论如何看它都是低效的。

如果有帮助,这是我的Schema

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
        }
      ]
    }
});

1 个答案:

答案 0 :(得分:3)

您可以使用由mongoose提供的slice query功能。浏览mongoose documentation on slice以便更好地理解。

  

根据文件:

slice([path], val)
     

指定数组的$ slice投影。

     

参数:

[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的第二个元素。