แบบสอบถามพังพอนโดยที่ค่าไม่เป็นโมฆะ


104

กำลังทำแบบสอบถามต่อไปนี้:

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

ฉันกำลังทำ where clause อย่างถูกต้องหรือไม่? ฉันต้องการเลือกเอกสารที่pincodeไม่เป็นโมฆะ

คำตอบ:


189

คุณควรจะทำได้เช่นนี้ (ขณะที่คุณใช้ API การค้นหา):

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

... ซึ่งจะส่งผลให้มีการค้นหา Mongo คล้าย:

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

ลิงก์บางส่วนที่อาจช่วยได้:


2
ne ย่อมาจากอะไร?
wesbos

3
"ไม่เท่ากัน" เพิ่มลิงก์ไปยังคำตอบ
ตัวเลข 1311407

เอกสาร mongodb อยู่ที่นี่ (ตอนนี้): docs.mongodb.org/manual/reference/operator/queryเอกสารล่าสุดเกี่ยวกับเรื่องนี้อยู่ที่นี่: mongoosejs.com/docs/api.html#query_Query-ne
zeropaper

วิธีบรรลุด้วยอาร์เรย์เช่น...("myArraySubDoc[0].someValue").ne(true)?
Steve K

@SirBenBenji อย่างเช่นwhere("myArraySubDoc.0.someValue").ne(true)
numbers1311407

9

ฉันลงเอยที่นี่และปัญหาของฉันคือฉันกำลังค้นหา

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

แทน

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

โปรดทราบว่านี่คือสิ่งที่ฉันกำลังมองหาอยู่ขอบคุณ!
Cacoon

ฉันกำลังดิ้นรนเพื่อหา $ ที่ไม่อยู่ในเอกสาร api! ขอบคุณ!
Jay Edwards

8

$ ne

เลือกเอกสารที่ค่าของเขตข้อมูลไม่เท่ากับค่าที่ระบุ ซึ่งรวมถึงเอกสารที่ไม่มีฟิลด์

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

$ nin

$ nin เลือกเอกสารโดยที่: ค่าฟิลด์ไม่อยู่ในอาร์เรย์ที่ระบุหรือไม่มีฟิลด์

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

0

จำนวนรวมนับเอกสารที่ค่าของฟิลด์ไม่เท่ากับค่าที่ระบุ

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

0

โอเคฉันพบวิธีแก้ปัญหานี้แล้ว ฉันรู้ว่าการรวมไม่มีอยู่ใน Mongo นั่นเป็นเหตุผลว่าทำไมก่อนอื่นคุณต้องสอบถามรหัสของผู้ใช้ด้วยบทบาทที่คุณชอบและหลังจากนั้นให้ทำการค้นหาเอกสารโปรไฟล์อีกครั้งดังนี้:

    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

สวัสดีทุกคนฉันติดอยู่กับสิ่งนี้ ฉันมีโปรไฟล์เอกสารที่มีการอ้างอิงถึงผู้ใช้และฉันได้พยายามแสดงรายการโปรไฟล์ที่การอ้างอิงของผู้ใช้ไม่เป็นโมฆะ (เพราะฉันถูกกรองโดยลูกกลิ้งในช่วงประชากร) แต่หลังจาก Google ไม่กี่ชั่วโมงฉันไม่สามารถเข้าใจได้ วิธีการรับสิ่งนี้ ฉันมีคำถามนี้:

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
}

ขอบคุณล่วงหน้า.


คุณไม่ควรถามคำถามในรูปแบบคำตอบ
Yasin Okumuş
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.