0

明らかな何かが欠けているに違いないような気がします。シェルに投稿するのと同じように、集計は次のようになります。

db.documents.aggregate(
   { $project: { title: 1, "date.year": 1, decade:
   { $subtract: ['$date.year', { $mod: ['$date.year', 10]}]}
}})

これは、それぞれdate.yearフィールドを持つドキュメントのリストを取得し、ドキュメントがどの10年にあるかを示す10年フィールドを追加することになっています(1900、1910など)。取得後にデータをさらに変換することを計画しています。それが追加されました。

問題は、集計を実行すると、次のようになることです。

{
    "errmsg" : "exception: $subtract resulted in a non-numeric type",
    "code" : 16413,
    "ok" : 0
}

$subtractを$addに変更すると、正常に機能します(ただし、もちろん、正しい結果は得られません)。では、減算はどうなっているのでしょうか。減算すると数値ではなく、加算すると数値になるのはなぜですか?

前もって感謝します!

4

1 に答える 1

3

これは、集計フレームワークのバグのように見えます。パイプラインを通過するドキュメントに操作対象のフィールドが設定されていない場合、減算が正しく処理されません。

これは2.3.2で修正されました(これを再現することはできません-「日付」が設定されていない場合は「null」を投影します)が、この制限を回避する1つの方法は、パイプラインに$ match条件、つまりプレフィックスを追加することです。 {$ project}と:

{$match: {"date.year":{$exists:true}}}

于 2013-02-05T04:32:01.567 に答える