-1

「||」を使用してクエリを実行すると、予期しない結果が表示されます および ""&&" コンディショニング操作。これはバグのようです。

バージョン:

C:\mongodb\bin>mongo.exe -version MongoDB シェル バージョン: 2.4.6

C:\mongodb\bin> C:\mongodb\bin>mongod.exe -version db version v2.4.6 Tue Oct 08 16:08:54.073 git バージョン: b9925db5eac369d77a3a5f5d98a145eaaacd9673

データベース レコード: ~~~~~~~~~~~~~~~~~~~~~~~~~~

C:\mongodb\bin>

>

db.cars.find() { "_id" : 100, "利用可能" : 1, "color" : "red", "name" : "GTO", "year" : 3939 }

db.cars.find( {利用可能 : 1, 年 : 3939}) { "_id" : 100, "利用可能" : 1, "色" : "赤", "名前" : "GTO", "年" : 3939 }

>

db.cars.find( { $where: "this.available == 1" && "this.year == 3939" }) { "_id" : 100, "available" : 1, "color" : "red", 「名前」:「GTO」、「年」:3939}

> >

db.cars.find( { $where: "this.available == 1" || "this.year == 3939" }) { "_id" : 100, "available" : 1, "color" : "red" 、「名前」:「GTO」、「年」:3939}

見られる問題: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以下のコマンドは、OR 条件演算 (つまり || を使用) を使用し、1 つの条件のみが true です。しかし、それでもエントリは表示されません..これは正しくありません。

db.cars.find( { $where: "this.available == 11" || "this.year == 3939" })

以下のコマンドは、AND 条件演算 (つまり && を使用) を使用し、1 つの条件のみが true ですが、エントリが表示されますが、これは正しくありません。AND 条件の場合、両方の式が TRUE を返す必要があります。

db.cars.find( { $where: "this.available == 11" && "this.year == 3939" }) { "_id" : 100, "available" : 1, "color" : "red", 「名前」:「GTO」、「年」:3939}

何か見逃した場合はお知らせください。

よろしく Jayanna Hallur ビッグデータ アナリスト、Wipro Technologies、バンガロール

4

1 に答える 1

2

$where ステートメントが正しくありません。これは、論理演算子を含む連続した JavaScript 文字列である必要があります。

"this.available == 1 && this.year == 3939" 

それ以外の :

"this.available == 1" && "this.year == 3939" 

評価されたステートメントは Truthy 値と見なされます。だからこれを考慮してください:

"this.available == 1 && this.year == 3939"  -->   TRUE  && TRUE
 "this.available == 1 || this.year == 3939 || this.favorite == 0" --> TRUE || TRUE || TRUE

複数のステートメントを持つことにより、mongodb インタープリターは論理演算子に従ってステートメントを評価し、最後に実行されたステートメントに基づいて結果を返します。

"this.available == 1" && "this.year == 3939"

使用可能な値に関係なく、年が 3939 であるすべてのドキュメントを返します。&& はすべてのオペランドをチェックする必要があるためです。

|| "これが利用可能 == 1" || 「今年 == 3939」

available に基づいてすべての値を提供し、「this.year」の評価は行われません。||として 最初の真の値が必要なだけで、終了します。

于 2013-10-08T11:17:15.243 に答える