我有兩個模式,一個是User
另一個是Pet
。 Pet
架構在User.aggregate
管道中有我想要$sum
的信息。總計和查找到另一個集合
Mongo版本是3.4.1。
用戶模式:
pets: [{type: Schema.Types.ObjectId, ref: 'Pets'}]
寵物模式:
owner: {type: Schema.Types.ObjectId, ref: 'User'},
petLost: {
lost : {type: Boolean, default: false},
lostDate : {type: String},
selectedComRange: {type: Number, default: 5},
circumstances : {type: String},
extraInfoLost : {type: String},
rewardCheck : {type: Boolean, default: false},
reward : {type: String},
addressLost : {type: String},
}
這是查找:
{'$unwind': '$pets'},
{
'$lookup': {
'from' : 'pets',
'localField' : '_id',
'foreignField': '_id',
'as' : 'lostPets'
}
},
{'$unwind': {path: '$lostPets', preserveNullAndEmptyArrays:true}}
這裏就是我想要達到的條件:
'lostPet_count': {
'$sum': {
'$cond': [{'$eq': ['$lostPets.lost', true]}, 1, 0]
}
}
總管道:
User.aggregate([
{
$group: {
_id : null,
'users_count' : {
'$sum': {
'$cond': [{'$eq': ['$role', 'user']}, 1, 0]
}
},
'volunteer_count': {
'$sum': {
'$cond': [{'$eq': ['$isVolunteer', true]}, 1, 0]
}
},
'pet_count' : {
'$sum': {
$size: '$pets'
}
},
'lost_pet' : {
'$sum': {
**// how can i call another collection and $sum some data?**
}
}
}
},
{
'$project': {
'_id' : 0, 'role': '$_id',
'statistics': {
'users' : '$users_count',
'volunteers': '$volunteer_count',
'pets' : '$pet_count'
}
}
}
]).exec((err, result) => {
if (err) {
console.log(err);
}
res.status(200).json(result);
});
我如何注入到信息財產'lost_pet'
從寵物模式?
看看[$查找(https://開頭的文檔.mongodb.com/manual/reference/operator/aggregation/lookup /) – felix
@felix這就是我現在正在做的事情,如果我設法做到這一點,我會回髮結果 –
當我嘗試展開陣列y'with'{'$ unwind':'$ pets'},'我得到這個錯誤:'MongoError:$ size的參數必須是一個數組,但是類型爲:objectId ' --- 這是schema類型:'pets:[{type:Schema.Types.ObjectId,ref:'Pets'}],' –