我试图找到公司提供的所有行程,按公交车司机分组,并检查一名乘客是否参加了行程。
Content是一个可以引用多个模型的数组:User,Cargo等。
我可以使用以下方式实现我想要的结果:
traveled: { $in: [ passengerId, "$content.item" ] },
但我想确认匹配的ID确实是“用户”(乘客)。我试过了:
traveled: { $and: [
{ $in: [ passengerId, "$content.item" ] },
{ $in: [ `Passenger`, "$content.kind" ] },
]},
但如果传递的id有一种' Cargo'当有另一个内容有一个'用户'在数组内部。
// Trip
const schema = Schema({
company: { type: Schema.Types.ObjectId, ref: 'Company', required: false },
driver: { type: Schema.Types.ObjectId, ref: 'User', required: true },
description: { type: String, required: true },
....
content: [{
kind: { type: String, required: true },
item: { type: Schema.Types.ObjectId, refPath: 'content.kind', required: true }
}]
});
const Trip = mongoose.model('Trip', schema, 'trips');
Trip.aggregate([
{ $match: { company: companyId } },
{
$project: {
_id: 1,
driver: 1,
description: 1,
traveled: { $in: [ passengerId, "$content.item" ] },
// traveled: { $and: [
// { $in: [ passengerId, "$content.item" ] },
// { $in: [ `Passenger`, "$content.kind" ] },
// ]},
}
},
{
$group : {
_id: "$driver",
content: {
$push: {
_id: "$_id",
description: "$description",
traveled: "$traveled",
}
}
},
}
]).then(console.log).catch(console.log);
答案 0 :(得分:1)
[2, 4, 3, 1]
[1, 2, 3, 4]
阶段有no $elemMatch operator
。因此,要使用模仿类似功能,您可以创建$project
$filter
为$size
> 0
像
这样的东西$gt