我正在尝试编写一个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
关于优雅的解决方法的任何想法?
退回所有交易将不是一个可行的长期解决方案.