Le groupement conditionnel avec $existe à l'intérieur de $cond
j'ai deux clés A et B et leur existence dans le document est mutuellement exclusive. Je dois Grouper par A quand a existe et grouper par B quand B existe. Donc, je suis $project
ing la valeur requise dans une clé de calcul appelée MyKey sur laquelle je vais effectuer un $group
. Mais il semble que je suis en train de faire une erreur avec la syntaxe. J'ai essayé d'écrire $projet de deux façons:
{$project: {MyKey: {$cond: [{$exists: ["$A", true]}, "$A", "$B"]}}}
et
{$project: {MyKey: {$cond: [{"A": {$exists:true}}, "$A", "$B"]}}}
mais je continue à obtenir le erreur:
{ "errmsg" : "exception: invalid operator '$exists'", "code" : 15999, "ok" : 0 } ...
Ce qui va mal?
4 réponses
si on veut vérifier $existe dans $cond une approche alternative est d'utiliser $pas avec $cond
{$project: {MyKey: {$cond: [{$not: ["$A"]}, "$B", "$A"]}}}
et table de vérité pour $n'est que
l'Espoir qui Aide
Vous pouvez simuler existe avec
$ne : [$var_to_check, undefined]
renvoie true si le var est défini
j'ai trouvé vos questions en cherchant un problème similaire, mais avec une clé insérée, je cherchais mes paramètres. J'ai finalement résolu le problème.
c'est Ce que j'ai utilisé pour mon $_id.l'état paramètre, pour vérifier s'il existe à l'intérieur de la cond.
$cond: [{
$or: [{
$ne: ["$_id.status", null]
}]
}, 1, null]
$ n'est pas nécessaire. Je l'y maintenir... juste pour le plaisir. Je ne pense pas que cela affecte la requête pour l'instant. Je testerai la vitesse plus tard.