gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:02:51 24 4
gpt4 key购买 nike

我想在我的文档中获取一个数组中的单个元素,而不是获取整个数组本身。使用 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 提供的 slice 功能 query 。通过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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com