J'ai ces 3 demandes:
db.mycollection.count({requestA:{$exists:true}})
db.mycollection.count({requestB:{$exists:true}})
db.mycollection.count({requestC:{$exists:true}})
Je voudrais faire une seule demande ... donc j'ai essayé les éléments suivants:
db.mycollection.aggregate([
{ $group: {
'_id' : { user_id: '$user_id'},
requestA_count: { $sum: {
$cond: [ {requestA:{'$exists':true}}, 1, 0 ]
} },
requestB_count: { $sum: {
$cond: [ {requestB:{'$exists':true}}, 1, 0 ]
} },
requestC_count: { $sum: {
$cond: [ {requestC:{'$exists':true}}, 1, 0 ]
} },
} },
{ $project: {
_id: 0,
user_id: '$_id.user_id',
requestA_count: 1,
requestB_count: 1,
requestC_count: 1
} }
]);
Mais je suis l'erreur:
"errmsg" : "exception: invalid operator '$exists'",
Je suppose que nous ne pouvons pas utiliser existe $ avec $ projet.
Des conseils sur une bonne approche? Merci
Merci Neil pour l'explication! –
En fait, Neil, requestA_count, requestB_count, requestC_count ont toujours la même valeur ...: /! Je veux dire, si requestA_count = 9 alors requestB_count et requestC_count = 9 –
@JohnSmith pouvez-vous éditer votre question pour montrer des données avec différents champs présents. Pour moi cela fonctionne. Si le champ n'existe pas, la valeur passée à sum est 0. –