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.

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:


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

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'] } })

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;
    })
}

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

-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": "myemail@gmail.com",
                "created_at": "2020-06-05T11:05:36.450Z"
            }
        }
    ],
    "page": 1
}

Merci d'avance.


Vous ne devriez pas poser vos questions sous forme de réponses
Yasin Okumuş
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.