Mungo-Abfrage, bei der der Wert nicht null ist


100

Suchen Sie nach der folgenden Abfrage:

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

Mache ich die where-Klausel richtig? Ich möchte Dokumente auswählen, bei denen pincodenicht null ist.

Antworten:


182

Sie sollten in der Lage sein, dies wie folgt zu tun (da Sie die Abfrage-API verwenden):

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

... was zu einer Mongo-Abfrage führt, die ähnelt:

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

Ein paar Links, die helfen könnten:


2
wofür steht ne
Wesbos

3
"ungleich", Hinzufügen von Links zur Antwort
Nummern 1311407

die mongodb docs darüber sind hier (jetzt): docs.mongodb.org/manual/reference/operator/query Das up-to-date doc darüber, ist hier: mongoosejs.com/docs/api.html#query_Query-ne
Nullpapier

Wie erreicht man mit Array, zB ...("myArraySubDoc[0].someValue").ne(true)?
Steve K

@ SirBenBenji so etwas wiewhere("myArraySubDoc.0.someValue").ne(true)
Nummern 1311407

9

Ich bin hier gelandet und mein Problem war, dass ich nachgefragt habe

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

anstatt

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

Nur eine Anmerkung, genau das habe ich gesucht, danke!
Cacoon

Ich hatte Mühe, $ nicht im API-Dokument zu finden! Vielen Dank!
Jay Edwards

7

$ ne

Wählt die Dokumente aus, bei denen der Wert des Felds nicht dem angegebenen Wert entspricht. Dies schließt Dokumente ein, die das Feld nicht enthalten.

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

$ nin

$ nin wählt die Dokumente aus, in denen: der Feldwert nicht im angegebenen Array enthalten ist oder das Feld nicht vorhanden ist.

User.find({ "groups": { "$nin": ['admin', 'user'] } })

0

Gesamtzahl der Dokumente, bei denen der Wert des Felds nicht dem angegebenen Wert entspricht.

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

0

Ok Leute, ich habe eine mögliche Lösung für dieses Problem gefunden. Ich habe festgestellt, dass es in Mongo keine Verknüpfungen gibt. Deshalb müssen Sie zuerst die Benutzer-IDs mit der gewünschten Rolle abfragen und anschließend eine weitere Abfrage des Profildokuments durchführen.

    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

Hallo Leute, ich bin damit festgefahren. Ich habe ein Dokumentprofil, das einen Verweis auf Benutzer enthält, und ich habe versucht, die Profile aufzulisten, bei denen Benutzerreferenz nicht null ist (da ich bereits während der Grundgesamtheit nach rol gefiltert habe), aber nach ein paar Stunden googeln kann ich es nicht herausfinden wie man das bekommt. Ich habe diese Frage:

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
}

Danke im Voraus.


Sie sollten Ihre Fragen nicht in Form von Antworten stellen
Yasin Okumuş
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.