2011-10-09 9 views
5

Cuando corro por debajo de la función JavaScript almacenado recibo errores:MongoDB: Error al ejecutar almacena función de 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)") 

Aquí está el Errores:

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

¿Por qué? ¿Por favor, ayúdame?

Respuesta

10

La función find() devuelve un cursor, que no se puede devolver desde JavaScript. El suggested workaround utiliza toArray() para obtener un valor de retorno de matriz.

Ejemplo ... antes:

> 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" } 

tal y como lo describe.
Y después:

> 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 
     } 
] 
+0

Esto es impresionante. Muchas gracias. – Zeck

+0

¡De nada! Feliz yo podría ayudar. :) – dampier

Cuestiones relacionadas