1

別のフィールドが部分文字列で終わる場合は値をフィールドに射影したいが、そうでない場合は別の値を射影したい

どうやってやるの?

例 (重要でないものは省略します):

ドキュメント 1:

{
    'Field1': 'A perfect normal string'
}

Doc N:

{ 
    'Field1': 'This one ends with my substring'
}

理想は次のようになります。

$project: {
    'HasSubstring': {$cond: [{$regex: 'substring$'}, true, false]}
}

しかし、$cond 内で $regex を使用できない (????) ため、これは機能しません。

誰でも私を指摘できますか?

どうもありがとう

PS: グループ化するために両方のドキュメントが必要なため、一致で正規表現フィルターを使用できません

4

1 に答える 1

0

どうですか:

文字を逆にして「Field1Reversed」フィールドを保存し、次を使用します。

$project: {
    'HasSubstring': {$cond:[{$eq:[ 'gnirtsbus', {$substr:["$Field1Reversed",0,9]}] } ,true,false]}
}

substr の使用には Unicode の影響がありますが、必要に応じてアプリで解決できます (comparand の長さを測定して、適切な substr のバイト数を取得します)。

于 2013-04-15T17:08:21.713 に答える