小编hoe*_*kma的帖子

Mongoose使用排序和限制填充虚拟

我正在尝试编写一个mongoose查询,该查询检索一组资产以及这些资产的最新事务.交易与资产分开收集.

为此,首先我在资产模型中创建了一个虚拟阵列,以将资产链接到事务.

schema.virtual('transactions', {
    ref: 'transaction',
    localField: '_id',
    foreignField: '_asset',
    justOne: false
})
Run Code Online (Sandbox Code Playgroud)

然后我在node.js表达控制器中使用.populate进行查询(注意硬编码的"limit:1"将在某个时刻变为N):

exports.getList = function (req, res) {
    Model
        .find({}, { __v: 0 })
        .populate({
            path: 'transactions',
            options: { sort: { 'created_at': -1}, limit: 1},
        })
        .lean()
        .exec(function (err, model) {
            if (err)
                res.send(err);
            res.json(model);
        });
  }
Run Code Online (Sandbox Code Playgroud)

我的测试系统中有3个资产,每个资产都有一堆交易,它返回前两个资产的旧交易,而第三个资产则没有.

当我删除"limit:1"并返回所有交易时,它会正确排序并返回所有三个资产的交易.

我相信我遇到了这个错误:

https://github.com/Automattic/mongoose/issues/4321

关于优雅的解决方法的任何想法?
退回所有交易将不是一个可行的长期解决方案.

mongoose mongodb node.js mongodb-query

3
推荐指数
2
解决办法
1442
查看次数

标签 统计

mongodb ×1

mongodb-query ×1

mongoose ×1

node.js ×1