68

私は 2 つのキー A と B を持っており、ドキュメント内でのそれらの存在は相互に排他的です。A が存在する場合は A でグループ化し、B が存在する場合は B でグループ化する必要があります。そこで$project、必要な値を MyKey と呼ばれる計算されたキーに入れています$group。しかし、構文を間違えているようです。$project を 2 つの方法で記述してみました。

{$project: {MyKey: {$cond: [{$exists: ["$A", true]}, "$A", "$B"]}}}

{$project: {MyKey: {$cond: [{"A": {$exists:true}}, "$A", "$B"]}}}

しかし、私はエラーが発生し続けます:

{ "errmsg" : "exception: invalid operator '$exists'", "code" : 15999, "ok" : 0 } ...

何がうまくいかないのですか?

4

4 に答える 4

76

$ifNullあなたの代わりに使用$condしてください$project

{ $project: {MyKey: {$ifNull: ['$A', '$B'] }}}

A存在し、存在しない場合null、その値が使用されます。それ以外の場合は、の値Bが使用されます。

于 2013-01-08T14:09:05.537 に答える
1

同様の問題を探しているときにあなたの質問を見つけましたが、キーの代わりに、パラメーターを探していました。私は最終的に問題を解決しました。

これは、cond 内に存在するかどうかを確認するために、 $_id.statusパラメーターに使用したものです。

$cond: [{
     $or: [{
          $ne: ["$_id.status", null]
     }]
}, 1, null]

$orは必要ありません。私はそれをそこに置いておきます...ただの楽しみです。現時点では、クエリにそれほど影響はないと思います。速度は後でテストします。

于 2014-11-13T15:47:29.727 に答える