gpt4 book ai didi

node.js - 从 Mongoose 中的嵌入文档中检索分页结果

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:57 25 4
gpt4 key购买 nike

使用 Mongoose ,如果我有一个 Note 模型,我可以使用 find 函数上的查询选项检索分页和排序的结果,就像这样......

   Note.find({ creator: creatorId})
.select('text')
.limit(perPage)
.skip(perPage * page)
.sort({
name: 'asc'
})
.exec(function(err, notes) {
Note.count().exec(function(err, count) {
res.render('notes', {
notes: notes,
page: page,
pages: count / perPage
})
})
});

如果我像这样在父文档 (notesContainerSchema) 中嵌入 Note 架构,我可以实现相同的功能(过滤、选择、限制、跳过、排序等)吗:

var noteSchema = new Schema({
creator: { type: String },
text: { type: String }
});

var notesContainerSchema = new Schema({
key: { type: String, unique: true },
notes: [ noteSchema ] // note schema is now an array of embedded docs
});

var NotesContainer = db.model('notesContainer', notesContainerSchema);

最佳答案

您可以使用aggregation与:

  • 一个$project阶段到 $filter notes 数组,包含 creatorId$slice结果
  • 一个$unwind展开笔记数组的阶段
  • 一个$sort按名字
  • $project 仅选择text 字段

在nodeJS中,使用 Mongoose :

NotesContainer.aggregate([{
$project: {
notes: {
$slice: [{
"$filter": {
"input": "$notes",
"as": "item",
"cond": { "$eq": ["$$item.creator", creatorId] }
}
}, (perPage * page), perPage]
}
}
}, {
$unwind: "$notes"
}, {
$sort: {
"notes.name": 1
}
}, {
$project: {
"text": "$notes.text",
"_id": 0
}
}]).exec(function(err, notes) {
console.log(notes);
});

关于node.js - 从 Mongoose 中的嵌入文档中检索分页结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44597428/

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