Consulta de mangosta donde el valor no es nulo

100

Buscando hacer la siguiente consulta:

Entrant
    .find
      enterDate : oneMonthAgo
      confirmed : true
    .where('pincode.length > 0')
    .exec (err,entrants)->

¿Estoy cumpliendo correctamente la cláusula where? Quiero seleccionar documentos donde pincodeno sea nulo.

Wesbos
fuente

Respuestas:

182

Debería poder hacer esto como (ya que está usando la API de consulta):

Entrant.where("pincode").ne(null)

... que resultará en una consulta mongo parecida a:

entrants.find({ pincode: { $ne: null } })

Algunos enlaces que pueden ayudar:

números1311407
fuente
2
¿Qué significa ne?
Wesbos
3
"no es igual", agregando enlaces a la respuesta
números 1311407
los documentos de mongodb al respecto están aquí (ahora): docs.mongodb.org/manual/reference/operator/query El documento actualizado al respecto está aquí: mongoosejs.com/docs/api.html#query_Query-ne
zeropaper
¿Cómo lograrlo con una matriz, por ejemplo ...("myArraySubDoc[0].someValue").ne(true)?
Steve K
@SirBenBenji algo así comowhere("myArraySubDoc.0.someValue").ne(true)
números1311407
9

Terminé aquí y mi problema fue que estaba consultando

{$not: {email: /@domain.com/}}

en vez de

{email: {$not: /@domain.com/}}
MalcolmOcean
fuente
Solo una nota, esto es exactamente lo que estaba buscando, ¡gracias!
Cacoon
¡Estaba luchando por encontrar $ not en el api doc! ¡Gracias!
Jay Edwards
7

$ ne

selecciona los documentos donde el valor del campo no es igual al valor especificado. Esto incluye documentos que no contienen el campo.

User.find({ "username": { "$ne": 'admin' } })

$ nin

$ nin selecciona los documentos donde: el valor del campo no está en la matriz especificada o el campo no existe.

User.find({ "groups": { "$nin": ['admin', 'user'] } })
Tính Ngô Quang
fuente
0

recuento total los documentos donde el valor del campo no es igual al valor especificado.

async function getRegisterUser() {
    return Login.count({"role": { $ne: 'Super Admin' }}, (err, totResUser) => {
        if (err) {
            return err;
        }
        return totResUser;
    })
}
Vadivel Subramanian
fuente
0

Ok chicos, encontré una posible solución a este problema. Me di cuenta de que las uniones no existen en Mongo, es por eso que primero debes consultar los identificadores del usuario con el rol que te gusta, y luego hacer otra consulta al documento de perfiles, algo como esto:

    const exclude: string = '-_id -created_at -gallery -wallet -MaxRequestersPerBooking -active -__v';

  // Get the _ids of users with the role equal to role.
    await User.find({role: role}, {_id: 1, role: 1, name: 1},  function(err, docs) {

        // Map the docs into an array of just the _ids
        var ids = docs.map(function(doc) { return doc._id; });

        // Get the profiles whose users are in that set.
        Profile.find({user: {$in: ids}}, function(err, profiles) {
            // docs contains your answer
            res.json({
                code: 200,
                profiles: profiles,
                page: page
            })
        })
        .select(exclude)
        .populate({
            path: 'user',
            select: '-password -verified -_id -__v'
            // group: { role: "$role"} 
          })
    });
R0bertinski
fuente
-1

Hola chicos, estoy atrapado con esto. Tengo un perfil de documento que tiene una referencia al usuario, y he intentado enumerar los perfiles donde la referencia del usuario no es nula (porque ya filtré por rol durante la población), pero después de buscar en Google unas horas no puedo entender cómo conseguir esto. Tengo esta consulta:

const profiles = await Profile.find({ user: {$exists: true,  $ne: null }})
                            .select("-gallery")
                            .sort( {_id: -1} )
                            .skip( skip )
                            .limit(10)
                            .select(exclude)
                            .populate({
                                path: 'user',
                                match: { role: {$eq: customer}},
                                select: '-password -verified -_id -__v'
                              })

                            .exec();

And I get this result, how can I remove from the results the user:null colletions? . I meant, I dont want to get the profile when user is null (the role does not match).
{
    "code": 200,
    "profiles": [
        {
            "description": null,
            "province": "West Midlands",
            "country": "UK",
            "postal_code": "83000",
            "user": null
        },
        {
            "description": null,

            "province": "Madrid",
            "country": "Spain",
            "postal_code": "43000",
            "user": {
                "role": "customer",
                "name": "pedrita",
                "email": "[email protected]",
                "created_at": "2020-06-05T11:05:36.450Z"
            }
        }
    ],
    "page": 1
}

Gracias por adelantado.

R0bertinski
fuente
No debe hacer sus preguntas en forma de respuestas
Yasin Okumuş