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

你可以使用mongoose提供的query slicefunction。 为了更好的理解,请阅读切片上的mongoose文档 。

根据文件:

 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