服务层如何使用Mongoose skip和limit功能?
How to use Mongoose skip and limit function in service layer?
如何从DAO获取文档列表并在服务层进行skip、limit操作?
这是我的 DAO 函数。
function findAllPosts(first,second) {
return Post.find({});
}
这是我的服务层。
function findAllPosts(first, second) {
return new Promises((resolve, reject) => {
postDao.findAllPosts(Number(first), Number(second)).
then((data) => {
var sortingOrd = { 'createdAt': -1 };
resolve(data.sort(sortingOrd).skip(Number(first)).limit(Number(second)));
})
.catch((error) => {
reject(error);
});
});
}
我遇到了这个错误。
TypeError: data.sort(...).skip is not a function
这是模型。
const mongoose = require('mongoose');
var timestamps = require('mongoose-timestamp');
var mexp = require('mongoose-elasticsearch-xp');
var updateIfCurrentPlugin = require('mongoose-update-if-current').updateIfCurrentPlugin;
var PostSchema = new mongoose.Schema({
title: String,
content: String,
categoryId: String,
location: String,
postSummary: String,
postImage: String,
userId: String,
author: String,
urlToImage: String,
newsSrc: String
});
PostSchema.plugin(mexp);
PostSchema.plugin(updateIfCurrentPlugin);
PostSchema.plugin(timestamps);
var Post = mongoose.model('Post', PostSchema);
Post
.esCreateMapping(
{
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "standard",
"char_filter": [
"html_strip"
],
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
}
)
.then(function (mapping) {
// do neat things here
});
Post.on('es-bulk-sent', function () {
});
Post.on('es-bulk-data', function (doc) {
});
Post.on('es-bulk-error', function (err) {
});
Post
.esSynchronize()
.then(function () {
});
module.exports = Post;
出于特定目的,我从 DAO 层中删除了排序、跳过和限制。你能告诉我如何在服务层使用这些吗?是否有将 "data" 数组转换为 DocumentQuery 对象的明确方法?
问题出在 findAllPosts 函数内部。
如果你需要跳过或限制,你应该在你的函数内部处理它们。
function findAllPosts(first,second, skip, limit) {
return Post.find({}).skip(skip).limit(limit);
}
或者完全删除 findAllPosts 函数并直接在主逻辑中使用 Post.find().limit().skip()。
我的建议:实施一个独立的单一用途功能 return 您的回复:
function findAllPosts(query, options, cb) {
Post
.find(query)
.select(options.select)
.skip(options.skip)
.limit(options.limit)
.sort(options.sort)
.lean(options.lean)
.exec(function(err, docs {
if(err) return cb(err, null);
return cb(null, docs);
});
}
如何从DAO获取文档列表并在服务层进行skip、limit操作?
这是我的 DAO 函数。
function findAllPosts(first,second) {
return Post.find({});
}
这是我的服务层。
function findAllPosts(first, second) {
return new Promises((resolve, reject) => {
postDao.findAllPosts(Number(first), Number(second)).
then((data) => {
var sortingOrd = { 'createdAt': -1 };
resolve(data.sort(sortingOrd).skip(Number(first)).limit(Number(second)));
})
.catch((error) => {
reject(error);
});
});
}
我遇到了这个错误。
TypeError: data.sort(...).skip is not a function
这是模型。
const mongoose = require('mongoose');
var timestamps = require('mongoose-timestamp');
var mexp = require('mongoose-elasticsearch-xp');
var updateIfCurrentPlugin = require('mongoose-update-if-current').updateIfCurrentPlugin;
var PostSchema = new mongoose.Schema({
title: String,
content: String,
categoryId: String,
location: String,
postSummary: String,
postImage: String,
userId: String,
author: String,
urlToImage: String,
newsSrc: String
});
PostSchema.plugin(mexp);
PostSchema.plugin(updateIfCurrentPlugin);
PostSchema.plugin(timestamps);
var Post = mongoose.model('Post', PostSchema);
Post
.esCreateMapping(
{
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "standard",
"char_filter": [
"html_strip"
],
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
}
)
.then(function (mapping) {
// do neat things here
});
Post.on('es-bulk-sent', function () {
});
Post.on('es-bulk-data', function (doc) {
});
Post.on('es-bulk-error', function (err) {
});
Post
.esSynchronize()
.then(function () {
});
module.exports = Post;
出于特定目的,我从 DAO 层中删除了排序、跳过和限制。你能告诉我如何在服务层使用这些吗?是否有将 "data" 数组转换为 DocumentQuery 对象的明确方法?
问题出在 findAllPosts 函数内部。 如果你需要跳过或限制,你应该在你的函数内部处理它们。
function findAllPosts(first,second, skip, limit) {
return Post.find({}).skip(skip).limit(limit);
}
或者完全删除 findAllPosts 函数并直接在主逻辑中使用 Post.find().limit().skip()。
我的建议:实施一个独立的单一用途功能 return 您的回复:
function findAllPosts(query, options, cb) {
Post
.find(query)
.select(options.select)
.skip(options.skip)
.limit(options.limit)
.sort(options.sort)
.lean(options.lean)
.exec(function(err, docs {
if(err) return cb(err, null);
return cb(null, docs);
});
}