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.

wesbos
quelle

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:

Nummern 1311407
quelle
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/}}
MalcolmOcean
quelle
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'] } })
Tính Ngô Quang
quelle
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;
    })
}
Vadivel Subramanian
quelle
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"} 
          })
    });
R0bertinski
quelle
-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": "[email protected]",
                "created_at": "2020-06-05T11:05:36.450Z"
            }
        }
    ],
    "page": 1
}

Danke im Voraus.

R0bertinski
quelle
Sie sollten Ihre Fragen nicht in Form von Antworten stellen
Yasin Okumuş