값이 null이 아닌 몽구스 쿼리


101

다음 쿼리를 수행하려고합니다.

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

where 절을 올바르게 수행하고 있습니까? pincodenull이 아닌 문서를 선택하고 싶습니다 .

답변:


184

다음과 같이 할 수 있어야합니다 (쿼리 API를 사용하는 것처럼) :

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

... 다음과 같은 mongo 쿼리가 생성됩니다.

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

도움이 될 수있는 몇 가지 링크 :


2
ne는 무엇을 의미합니까?
wesbos

3
"같지 않음", 답변에 링크 추가
numbers1311407

이에 관한 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 문서에서 $ not을 찾기 위해 고군분투하고 있었다! 감사!
Jay Edwards

7

$ ne

필드 값이 지정된 값과 같지 않은 문서를 선택합니다. 여기에는 필드가 포함되지 않은 문서가 포함됩니다.

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

9 달러

$ nin은 다음과 같은 문서를 선택합니다. 필드 값이 지정된 배열에 없거나 필드가 존재하지 않습니다.

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

0

total은 필드 값이 지정된 값과 같지 않은 문서를 계산합니다.

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

0

좋아,이 문제에 대한 가능한 해결책을 찾았습니다. Mongo에는 조인이 존재하지 않는다는 사실을 깨달았 기 때문에 먼저 원하는 역할로 사용자의 ID를 쿼리하고 그 후에 다음과 같이 프로필 문서에 대한 또 다른 쿼리를 수행해야합니다.

    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

안녕하세요 여러분 저는 이것에 갇혀 있습니다. User에 대한 참조가있는 문서 프로필이 있고 user ref가 null이 아닌 프로필을 나열하려고했지만 (이미 채우기 중에 rol로 필터링했기 때문에) 몇 시간 동안 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.