$ne consulta no funciona con la mangosta, pero trabajando en mongoshell

Cuando ejecuto esta mangosta consulta

FinancedProject.find({_id:{$ne:fb.financedProjects.financedProjectId}).exec( callback);

donde fb es un objeto como este

{
    _id: ObjectId("54das4da9dsa9d4ad4a9");
    name: "some",
    financedProjects: [
       {registry:"147", financedProjectId:ObjectId("13da4sd4sa48da4dsa")},
       {registry:"189", financedProjectId:ObjectId("5d5asd5a4sd5ada5sd")}
    ]
{

el resultado es indefinido y cuando me ejecutarlo en el mongoshell los resultados son los esperados

  • Es el resultado undefined o un vacío array?
  • Indefinido, y si he de poner en la mangosta debug a true, no me muestra la consulta
  • Si el resultado es indefinido, probablemente hubo un error. Lo que está en el error de parámetro de la devolución de llamada?
InformationsquelleAutor labkode | 2014-01-31

1 Kommentar

  1. 7

    Porque financedProjects es un array usted tiene que tratar el elemento con [] como:

    FinancedProject.find({
        _id: {
            $ne: fb.financedProjects[0|.financedProjectId
        }
    }).exec( callback );

    EDICIÓN:

    mangosta ist JavaScript, así que sigue las reglas de JavaScript. fb.financedProjects es un array. Así que si usted utiliza la expresión fb.financedProjects.financedProjectId esto es evaluado a undefined por el intérprete de JavaScript, ya que no hay financedProjectId propiedad dentro de la matriz (matrices tienen 0,1,2,3,… como propiedades). Así mangosta no { $ne: undefined } y no tiene la oportunidad de reconocer que la propiedad financedProjectId de la matriz elementos.

    Para lograr lo que usted desea, usted puede hacer esto:

    var arr = [];
    for( var i=0; i<fb.financedProjects.length; i+=1 ) {
        arr.push( fb.financedProjects[i|.financedProjectId );
    }
    FinancedProject.find({
        $not: {
            _id: {
                $in: arr
            }
        }
    }).exec( callback );
    • Que trabajo para un caso, pero quiero comparar a todos los demás.Como he dicho, en mongoshell funciona perfectamente.Creo que el problema está en la mangosta aplicación de $ne, cuando se compara docs dentro de una matriz
    • De donde sacas fb de (mangosta y shell). Por favor ver más código.
    • …y ver mi edición.
    • Gracias. El problema, como usted dijo, es que financedProjects en JS. Muchas gracias

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein