1

私はmongodbコンパスで実行しようとしているかなり単純なクエリであるべきものを持っています:

{ $and: [ { Source: "hostname" }, { Message: { $not: /.*unexpected data.*1234.*/ } } ] }

基本的に、ドキュメント モデルにはSourceフィールドとフィールドが含まれていMessageます。

ソースが特定の「ホスト名」と等しく、メッセージに「予期しないデータ... 1234」が含まれていないすべてのドキュメントを照会する必要があります。

正規表現に $not フィルターを含めない場合、すべてが正常に機能します...したがって、このメッセージが含まれているすべてのドキュメントを取得します...しかし、これが含まれていない他のすべてのメッセージが必要です...そして$not の正しい使い方がわかりません。

MongoDb マニュアルに記載されている例では、$not を 1 つのステートメントで使用することしか示していませんが、これでも何らかの理由で機能しません...

{ Message: { $not: /.*unexpected data.*1234.*/ } }

繰り返しますが、$not がなくても問題なく動作します...何が欠けていますか?

編集:

これは私が話していることの画像です。このフィルターをMongoDb Compassに配置すると、フィルターが正しくないことが示されます... MongoDb Compassは何らかの理由で複雑なフィルターを実行できませんか? 壊れた mongo フィルター

4

2 に答える 2

2

ここに画像の説明を入力動作するはずの $regex を試してください:

find( { $and: [ { Source: "hostname" }, { Message: { $not: { $regex: /.*unexpected data.*1234.*/ } } } ] })
于 2019-08-30T02:32:10.947 に答える