Truy vấn Mongoose trong đó giá trị không rỗng


100

Tìm cách thực hiện truy vấn sau:

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

Tôi có đang làm đúng mệnh đề where không? Tôi muốn chọn tài liệu pincodekhông trống.

Câu trả lời:


182

Bạn sẽ có thể làm điều này như (khi bạn đang sử dụng api truy vấn):

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

... sẽ dẫn đến một truy vấn mongo giống như sau:

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

Một số liên kết có thể giúp:


2
ne là viết tắt của gì?
wesbos

3
"không bằng", thêm liên kết đến câu trả lời
số 1311407

tài liệu mongodb về nó ở đây (bây giờ): docs.mongodb.org/manual/reference/operator/query Tài liệu cập nhật về nó, ở đây: mongoosejs.com/docs/api.html#query_Query-ne
zeropaper

Làm thế nào để đạt được với mảng, ví dụ ...("myArraySubDoc[0].someValue").ne(true)?
Steve K,

@SirBenBenji gì đó giống nhưwhere("myArraySubDoc.0.someValue").ne(true)
số 1311407

9

Tôi đã kết thúc ở đây và vấn đề của tôi là tôi đang truy vấn

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

thay vì

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

Chỉ cần một lưu ý đây chính xác là những gì tôi đã tìm kiếm chính mình, cảm ơn!
Cacoon

Tôi đã cố gắng tìm kiếm $ không có trong tài liệu api! cảm ơn!
Jay Edwards

7

$ ne

chọn các tài liệu mà giá trị của trường không bằng giá trị được chỉ định. Điều này bao gồm các tài liệu không chứa trường.

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

$ nin

$ nin chọn các tài liệu trong đó: giá trị trường không nằm trong mảng được chỉ định hoặc trường không tồn tại.

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

0

tổng đếm các tài liệu mà giá trị của trường không bằng giá trị đã chỉ định.

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

0

Ok các bạn, tôi đã tìm thấy một giải pháp khả thi cho vấn đề này. Tôi nhận ra rằng các phép nối không tồn tại trong Mongo, đó là lý do tại sao trước tiên bạn cần truy vấn id của người dùng với vai trò bạn thích và sau đó thực hiện một truy vấn khác đến tài liệu hồ sơ, giống như sau:

    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

Xin chào các bạn, tôi đang bị mắc kẹt với điều này. Tôi có một Hồ sơ tài liệu có tham chiếu đến Người dùng và tôi đã cố gắng liệt kê các hồ sơ mà số tham chiếu của người dùng không bị rỗng (vì tôi đã lọc theo rol trong tổng thể), nhưng sau khi google vài giờ, tôi không thể tìm ra làm sao để có được điều này. Tôi có truy vấn này:

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
}

Cảm ơn trước.


Bạn không nên đặt câu hỏi của mình dưới dạng câu trả lời
Yasin Okumuş
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.