J'ai essayé toutes les méthodes que j'ai trouvées sur SO sans succès. Essayer pour accomplir une tâche en apparence simple (très facile avec JSON/lodash par exemple) MongoDB ..MongoDB> extraire la collection du tableau imbriqué
J'ai une collection: db.users>
[
{
_id: 'userid',
profile: {
username: 'abc',
tests: [
{
_id: 'testid',
meta: {
category: 'math',
date: '9/2/2017',
...
}
questions: [
{
type: 'add',
correct: true,
},
{
type: 'subtract',
correct: true,
},
{
type: 'add',
correct: false,
},
{
type: 'multiply',
correct: false,
},
]
},
...
]
}
},
...
]
Je veux finir avec un tableau regroupés par type de question:
[
{
type: 'add',
correct: 5,
wrong: 3,
},
{
type: 'subtract',
correct: 4,
wrong: 9
}
...
]
J'ai essayé différentes variations d'agrégats, la dernière est:
db.users.aggregate([
{ $match: { 'profile.tests.meta.category': 'math' }},
{
$project: {
tests: {
$filter: {
input: "$profile.tests",
as: "test",
cond: { $eq: ['$$test.meta.category', 'math'] }
}
}
}
},
{
$project: {
question: "$tests.questions"
}
},
{ $unwind: "$questions"},
])
également essayé d'ajouter un groupe $ à la fin de la canalisation:
{
$group:
{
_id: '$questions.type',
res: {
$addToSet: { correct: {$eq:['$questions.chosenAnswer', '$questions.answers.correct'] }
}
}
}
Aucune variation m'a donné ce que je cherche, je suis sûr que je manque un concept de base, je l'ai regardé la documentation et ne pouvait pas le comprendre .. ce que je cherche essentiellement est un flatMap pour extraire toutes les questions de tous les utilisateurs et les regrouper par type.
Si quelqu'un peut me guider dans la bonne direction, j'apprécierai beaucoup :) thx. (En outre, j'utilise Meteor, donc toute requête doit fonctionner dans Meteor mongo)
Désolé, seuls les champs copiés pertinents, mais il est une erreur, devrait être meta> catégorie> mathématiques au lieu de la catégorie juste .. Je vais mettre à jour le Q, thx – webkit