使用猫鼬,如果我有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
})
})
});
如果将
Note
模式嵌入到父文档(notesContainerSchema
)中,是否可以实现相同的功能(筛选,选择,限制,跳过,排序等),如下所示: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阶段以展开notes数组
一个$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/