태그 필드가있는 문서가 있습니다. 태그 이름이 들어있는 간단한 배열입니다. 내부에는 객체 나 _id가 없습니다. ["Protocol", "Access", "Leverage", "Capability"]
과 같은 일반 태그 만 사용하십시오.MongoDB 집합체, 그룹 파이프 라인에 배열의 각 요소를 추가하는 방법
내 그룹 파이프 라인에서 나는 'selectedTags': { $addToSet: '$tags' }
과 같은 것을 시도했지만 태그 배열이 포함 된 배열로 끝납니다. 그리고 $push
과 똑같습니다.
$each
또는 $pushAll
을 사용하려고했지만 내 쉘이 말한 것처럼 그룹화 연산자로 지원되지 않습니다.
누군가 나를 도와주세요.
샘플 문서 :
당신에게편집 감사
{
"_id" : "HWEdDGsq86x4ikDSQ",
"teamId" : "AdLizGnPuqbWNsFHe",
"ownerId" : "Qb5EigWjqn2t3bfxD",
"type" : "meeting",
"topic" : "Grass-roots hybrid knowledge user",
"fullname" : "Guidouil",
"startDate" : ISODate("2017-07-30T09:00:05.513Z"),
"shareResults" : true,
"open" : true,
"language" : "fr",
"tags" : [
"Protocol",
"Challenge",
"Artificial Intelligence",
"Capability"
],
"isDemo" : true,
"createdAt" : ISODate("2017-11-15T19:24:05.513Z"),
"participantsCount" : 10,
"ratersCount" : 10,
"averageRating" : 3.4,
"hasAnswers" : true,
"updatedAt" : ISODate("2017-11-15T19:24:05.562Z")
}
{
"_id" : "rXvkFndpXwJ6KAvNo",
"teamId" : "AdLizGnPuqbWNsFHe",
"ownerId" : "Qb5EigWjqn2t3bfxD",
"type" : "meeting",
"topic" : "Profit-focused modular system engine",
"fullname" : "Guidouil",
"startDate" : ISODate("2017-07-24T12:00:05.564Z"),
"shareResults" : true,
"open" : true,
"language" : "fr",
"tags" : [
"Initiative",
"Artificial Intelligence",
"Protocol",
"Utilisation"
],
"isDemo" : true,
"createdAt" : ISODate("2017-11-15T19:24:05.564Z"),
"participantsCount" : 33,
"ratersCount" : 33,
"averageRating" : 2.9393939393939394,
"hasAnswers" : true,
"updatedAt" : ISODate("2017-11-15T19:24:05.753Z")
}
집계 :
db.surveys.aggregate(
{ $match: query },
{
$group: {
'_id': {
'year': { $year: '$startDate' },
'day': { $dayOfYear: '$startDate' },
},
'participants': { $sum: '$ratersCount' },
'rating': { $avg: '$averageRating' },
'surveys': { $push: '$_id' },
'selectedTags': { $addToSet: '$tags' },
'peoples': { $addToSet: '$fullname' },
}
},
{ $sort: { _id: 1 } }
);
다음 내가
{ $push: { $each: '$tags' } }
또는
{ $pushAll: '$tags' }
에 selectedTags을 변경하려고했지만이되지 않습니다 실행 :(
편집 2 :이
자바 스크립트에서 나는 그런 식으로 그것을 할 :
return Surveys.aggregate(
{ $match: query },
{ $group: {
_id: dateGroup,
participants: { $sum: '$ratersCount' },
rating: { $avg: '$averageRating' },
surveys: { $push: '$_id' },
selectedTags: { $push: '$tags' },
peoples: { $addToSet: '$fullname' },
} },
{ $project: {
_id: null,
selectedTags: {
$reduce: {
input: "$selectedTags",
initialValue: [],
in: { $setUnion: ["$$value", "$$this"] }
}
},
} }
);
시도를 표시 할 수 있습니까? 당신이 성취하려고 노력하고있는 것에 대해 약간의 빛을 비춰 줄 수 있습니다. –