如何在服务层使用Mongoose跳过和限制功能?

小酒瓶

如何从 DAO 获取文档列表并在服务层执行跳过、限制操作?

这是我的 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 层中删除了排序、跳过和限制。你能告诉我如何在服务层使用这些吗?是否有将“数据”数组转换为 DocumentQuery 对象的显式方法?

赛义德

问题出在 findAllPosts 函数内部。如果您需要跳过或限制,您应该在您的函数内部处理它们。

function findAllPosts(first,second, skip, limit) {
    return Post.find({}).skip(skip).limit(limit);
}

或者完全删除 findAllPosts 函数并直接在主逻辑中使用 Post.find().limit().skip() 。

我的建议:实现一个独立的单一用途函数来返回你的响应:

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);
    });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在服务层中使用AsNoTracking

Clickhouse:如何在Clickhouse中使用“数据跳过索引”和“带有数据跳过索引的操作”功能?

如何在SQL Server中使用跳过功能

如何在Docker中使用微服务测试集成层

如何在流明中使用DRY和服务层?

如何在Node JS中使用服务层

如何在Android中使用服务功能

使用限制和跳过的 MongoDB 更新

如何在 Laravel API 上的控制器中应用跳过和限制过滤器

如何在下面显示的聚合查询中添加排序、限制和跳过?

服务和DAO层的职责和使用

如何在Navsion 2009中跳过功能

如何在服务层访问会话信息?

如何在Django中实现服务层?

如何使用猫鼬区分,一起跳过和限制

如何在启动时跳过/取消/否则加快扫描和修复功能?

如何在服务层中结合JSR-303和Spring Validator类?

如何在一个Keras层中使用不同的激活功能?

Tensorflow 2:如何在 keras 功能 API 中使用密集层堆栈?

如何在pylearn2的隐藏层中使用泄漏的ReLus作为激活功能

如何在不使用样式功能的情况下动态样式化Cluster层

如何在Laravel中的get()之后使用限制和偏移

如何在CoreData中使用NSPredicate进行排序和限制?

如何限制和跳过typeorm中的相关列

如何在功能模块中使用导入的forRoot()服务?

如何在无服务器框架中使用外部层?

如何克服“绘图”和“填充”功能限制

服务层和交易

如何在Keras中使用Lambda层?