Requête Mongoose où la valeur n'est pas nulle

101

Vous cherchez à faire la requête suivante:

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

Est-ce que je fais correctement la clause where? Je souhaite sélectionner des documents dont la valeur pincoden'est pas nulle.

wesbos
la source

Réponses:

184

Vous devriez pouvoir le faire comme (car vous utilisez l'API de requête):

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

... qui se traduira par une requête mongo ressemblant à:

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

Quelques liens qui pourraient vous aider:

numéros1311407
la source
2
que signifie ne?
wesbos
3
"pas égal", ajout de liens vers la réponse
nombres1311407
la documentation mongodb à ce sujet est ici (maintenant): docs.mongodb.org/manual/reference/operator/query La documentation à jour à ce sujet est ici: mongoosejs.com/docs/api.html#query_Query-ne
zeropaper le
Comment réaliser avec tableau, par exemple ...("myArraySubDoc[0].someValue").ne(true)?
Steve K
@SirBenBenji quelque chose commewhere("myArraySubDoc.0.someValue").ne(true)
numbers1311407
9

Je me suis retrouvé ici et mon problème était que je demandais

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

au lieu de

{email: {$not: /@domain.com/}}
MalcolmOcean
la source
Juste une note, c'est exactement ce que je cherchais moi-même, merci!
Cacoon
J'avais du mal à trouver $ pas dans la doc api! Merci!
Jay Edwards
7

$ ne

sélectionne les documents où la valeur du champ n'est pas égale à la valeur spécifiée. Cela inclut les documents qui ne contiennent pas le champ.

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

nin $

$ nin sélectionne les documents où: la valeur du champ n'est pas dans le tableau spécifié ou le champ n'existe pas.

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

total compte les documents dont la valeur du champ n'est pas égale à la valeur spécifiée.

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

Ok les gars, j'ai trouvé une solution possible à ce problème. J'ai réalisé que les jointures n'existaient pas dans Mongo, c'est pourquoi vous devez d'abord interroger les identifiants de l'utilisateur avec le rôle que vous aimez, puis effectuer une autre requête dans le document de profils, quelque chose comme ceci:

    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
la source
-1

Bonjour les gars, je suis coincé avec ça. J'ai un profil de document qui a une référence à l'utilisateur, et j'ai essayé de répertorier les profils où la référence de l'utilisateur n'est pas nulle (car j'ai déjà filtré par rôle pendant la population), mais après quelques heures de recherche sur Google, je ne parviens pas à comprendre Comment obtenir ceci. J'ai cette question:

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
}

Merci d'avance.

R0bertinski
la source
Vous ne devriez pas poser vos questions sous forme de réponses
Yasin Okumuş