5

保存された JavaScript 関数の下で実行すると、エラーが発生します。

> db.system.js.save({_id:"last_n_users", value: function(n){return db.users.find().sort({created_at:-1}).limit(n)}})
> db.eval("last_n_users(10)")

エラーは次のとおりです。

{ "value" : "DBQuery: store.users -> undefined" }

なんで?私を助けてください?

4

1 に答える 1

11

find() 関数はカーソルを返しますが、これは JavaScript からは返すことができません。推奨される回避策は、toArray() を使用して配列の戻り値を取得することです。

例 ... 前:

> use admin
switched to db admin
> db.system.js.save( { _id : "foo", value: function(n){return db.system.indexes.find().limit(n)} } )         
> db.eval( "foo(3)" )                                                                               
{ "value" : "DBQuery: admin.system.indexes -> undefined" }

あなたが説明するように。
以降:

> db.system.js.save( { _id : "foo", value: function(n){return db.system.indexes.find().limit(n).toArray()} } )
> db.eval( "foo(3)" )                                                                                         
[
        {
                "name" : "_id_",
                "ns" : "admin.system.users",
                "key" : {
                        "_id" : 1
                }
        },
        {
                "name" : "user_1",
                "ns" : "admin.system.users",
                "key" : {
                        "user" : 1
                },
                "unique" : false
        },
        {
                "name" : "_id_",
                "ns" : "admin.whee",
                "key" : {
                        "_id" : 1
                },
                "v" : 0
        }
]
于 2011-10-11T00:49:33.413 に答える