sql >> データベース >  >> NoSQL >> MongoDB

Mongodb$whereクエリはnodejsで常にtrue

    まず、$where ここで説明されている理由から、演算子を使用することはほとんどありません(クレジットは@WiredPrairieに送られます)。

    問題に戻ると、採用したいアプローチは、mongodbシェル($whereで裸のjs関数を明示的に許可する)でも機能しません。 オペレーター)。 $whereに提供されるJavaScriptコード 演算子はmongoサーバーで実行され、囲んでいる環境(「コンテキストバインディング」)にアクセスできません。

    > db.test.insert({a: 42})
    > db.test.find({a: 42})
    { "_id" : ObjectId("5150433c73f604984a7dff91"), "a" : 42 }
    > db.test.find({$where: function() { return this.a == 42 }}) // works
    { "_id" : ObjectId("5150433c73f604984a7dff91"), "a" : 42 }
    > var local_var = 42
    > db.test.find({$where: function() { return this.a == local_var }})
    error: {
        "$err" : "error on invocation of $where function:\nJS Error: ReferenceError: local_var is not defined nofile_b:1",
        "code" : 10071
    }
    

    さらに、node.jsネイティブmongoドライバーは、クエリオブジェクトで提供するjs関数を自動的にシリアル化せず、代わりに句を完全に削除するという点で、シェルとは異なる動作をするように見えます。これにより、timetables.find({})に相当するものが残ります。 コレクション内のすべてのドキュメントが返されます。



    1. レール上のRedispub/ sub

    2. MongoDb:$lookupを使用して深くネストされたオブジェクトを検索します

    3. DataTableをRedisとの間でシリアル化/逆シリアル化するための最も時間効率の良い方法は何ですか?

    4. MongoDB $ binarySize