使用貓鼬,如果我有一個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);
請參閱['$切片'](https://docs.mongodb.com/manual/reference/operator/projection/slice/)。從MongoDB的開始就已經出現了這個特定的目的。 –
我瞭解'$ slice'如何用於'skip'和'limit'。我不知道我怎麼也可以'篩選','選擇'和'排序'數據呢? – CSharp
如果你真的**需要**所有這些操作,那麼保存爲單獨的集合可能會更好。你可以交替使用['$ lookup']](https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/)而不是'.populate()'來執行「加入」在你需要數據的時候在服務器上。但是對於嵌入,我們可以用數組,「$ filter」等來做「最」的事情。然而像'$ sort'(動態的那樣)仍然需要'$ unwind'。 '$ unwind'意味着在所有情況下的表現痛苦。 –