Tyl*_*dix 11 mongoose mongodb aggregation-framework
相对简单的场景:
我有这个Voucher具有user属性(类型ObjectId)的对象.我想获得单个用户的所有凭证值的总和.这是我当前的策略,它返回一个空数组:
Voucher.aggregate [
{ $match : { user : new ObjectId(user_id), expires : { $gt : new Date() } } }
{ $group : { _id : null, sum : { $sum : '$value' } } }
], (err, result)->
console.log err
console.log result
Run Code Online (Sandbox Code Playgroud)
删除userid 的匹配项并离开该expires字段将返回结果.那么问题就变成了比赛的错误user?
Tyl*_*dix 52
事实证明,ObjectId的转换似乎是个问题.mongoose.Schema.Types.ObjectId当它需要只是一个纯ObjectId时,它使用Schema类型Object Id 进行转换mongoose.Types.ObjectId.
Fab*_*ius 15
使用find方法或findById时,查询只能是:
var query = {
$or: [
{'_sender':req.body._id},
{'_recipient':req.body._id}
]
};
Run Code Online (Sandbox Code Playgroud)
使用聚合时,查询需要强制转换
var mongoose = require('mongoose');
var query = {
$or: [
{'_sender':new mongoose.Types.ObjectId(decoded._id)},
{'_recipient':new mongoose.Types.ObjectId(decoded._id)}
]
};
Run Code Online (Sandbox Code Playgroud)
小智 6
var aggregate = [
{
$match: {
'lenderId': new mongoose.Types.ObjectId(req.user),
'_disbursed': true
}
},
{
$unwind:'$emi'
},
{
$match: {
'emi._settled': false,
}
}
];
Run Code Online (Sandbox Code Playgroud)