Değerin null olmadığı Mongoose sorgusu


104

Aşağıdaki sorguyu yapmak istiyoruz:

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

Nerede maddesini doğru bir şekilde yapıyor muyum? pincodeBoş olmayan belgeleri seçmek istiyorum .

Yanıtlar:


190

Bunu şu şekilde yapabilmeniz gerekir (sorgu api'sini kullanırken):

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

... bu, aşağıdakilere benzer bir mongo sorgusuyla sonuçlanacaktır:

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

Yardımcı olabilecek birkaç bağlantı:


2
ne anlama geliyor?
wesbos

3
"eşit değil", yanıta bağlantılar ekleyerek
sayılar1311407

bununla ilgili mongodb belgeleri burada (şimdi): docs.mongodb.org/manual/reference/operator/query Bu konudaki güncel belge burada: mongoosejs.com/docs/api.html#query_Query-ne
zeropaper

Dizi ile nasıl başarılır, örneğin ...("myArraySubDoc[0].someValue").ne(true)?
Steve K

@SirBenBenji şuna benzerwhere("myArraySubDoc.0.someValue").ne(true)
numbers1311407

9

Buraya geldim ve sorunum şu soruydu:

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

onun yerine

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

Sadece bir not, bu tam olarak kendimi aradığım şeydi, teşekkürler!
Cacoon

API belgesinde değil $ bulmakta zorlanıyordum! Teşekkürler!
Jay Edwards

8

$ ne

alan değerinin belirtilen değere eşit olmadığı belgeleri seçer. Bu, alanı içermeyen belgeleri içerir.

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

$ nin

$ nin, şu belgeleri seçer: alan değeri belirtilen dizide değil veya alan yok.

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

0

toplam, alanın değerinin belirtilen değere eşit olmadığı belgeleri sayar.

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

0

Tamam arkadaşlar bu soruna olası bir çözüm buldum. Birleştirmelerin Mongo'da olmadığını fark ettim, bu yüzden ilk önce beğendiğiniz rolle kullanıcı kimliklerini sorgulamanız ve bundan sonra profiller belgesine başka bir sorgu yapmanız gerekir, bunun gibi bir şey:

    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

Merhaba arkadaşlar ben buna sıkıştım. Kullanıcıya referansı olan bir Belge Profilim var ve kullanıcı referansının boş olmadığı profilleri listelemeye çalıştım (çünkü popülasyon sırasında rol ile zaten filtreledim), ancak birkaç saat google'dan sonra anlayamıyorum bu nasıl elde edilir. Bu sorgum var:

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
}

Şimdiden teşekkürler.


Sorularınızı cevap şeklinde sormamalısınız
Yasin Okumuş
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.