programing

Mongodb 도트 표기 와일드카드?

skycolor 2023. 7. 6. 22:03
반응형

Mongodb 도트 표기 와일드카드?

사용자 모음이 있으며 각 사용자는 하나 이상의 서비스에 가입되어 있을 수 있습니다.각 서비스에는 사용자가 해당 서비스에 대해 보유한 크레딧 수를 포함한 일부 메타데이터가 있습니다.

서비스 개체 키가 무엇인지 알 수 없는 경우 일부 서비스에 대해 50학점 미만인 모든 사용자 개체를 어떻게 찾을 수 있습니까?

개념적으로, 이것은 다음과 같은 것이 될 것입니다. 이것은 작동하지 않습니다.

db.users.find({services.*.credits : {$lt : 50}})

사용자 컬렉션:

   {
_id: 4f0ea25072139e4d2000001f,
services : {
    a : { credits : 100, score : 2000 },
    b : { credits : 200, score : 300 },
    c : { credits : 10, score : 1300 }
    }
},
{
_id: 4f0ea25072139e4d2000001f,
services : {
    f : { credits : 68, score : 14 },
    q : { credits : 1000, score : 102 },
    z : { credits : 59, score : 352 }
    }
}

여기에 명확하지 않은 경우를 대비하여 제가 하고 싶은 일의 또 다른 예가 설명되어 있습니다. http://www.mongodb.org/display/DOCS/Advanced+Queries#comment-346075854

이것은 당신의 질문에 대한 실제 대답입니다.

서비스 개체 키를 알 수 없는 경우 일부 서비스에 대한 크레딧이 50개 미만인 모든 사용자 개체를 찾을 수 있는 방법은 다음과 같습니다.

$where 쿼리 사용:

db.users.find({
    $where: function () {
        for (var index in this.services)
            if (this.services[index].credits < 50)
                return this;
    }
});

사용 중인 스키마를 사용하여 이 작업을 수행할 수 있는 방법을 모르겠습니다.제가 보기에 당신은 물체를 배열로 남용하고 있는 것 같습니다.한다면services배열(그것이 되어야 하는 복수의 힌트)이라면, 당신은 간단하게 질문할 수 있습니다.

db.users.find({"services.credits" : { $lt : 50 }}); 

또는 사용$elemMatch단일 배열 요소에서 여러 조건을 일치시켜야 하는 경우.

해당 서비스 개체를 어레이에 넣어 사용하는 것이 더 쉬울 것 같습니다.$elemMatch예:

{
  services : [
    {key: "a" , credits : 100, score : 2000 },
    {key: "b", credits : 200, score : 300 },
    {key: "c", credits : 10, score : 1300 }
  ]
}

그리고.

{
  _id: 4f0ea25072139e4d2000001f,
  services : [
    {key: "f", credits : 68, score : 14 },
    {key: "q", credits : 1000, score : 102 },
    {key: "z", credits : 59, score : 352 }
  ]
}

그런 다음 작성할 쿼리는 다음과 같습니다.

db.coll.find({services: {$elemMatch : {credits: {$lt: 50}}}});

결과:

{ "_id" : ObjectId("4f0f2be07561bf94ea47eec4"), "services" : [  {   "key" : "a", "credits" : 100, "score" : 2000 }, { "key" : "b", "credits" : 200, "score" : 300 },    {   "key" : "c",    "credits" : 10,     "score" : 1300 } ] }

언급URL : https://stackoverflow.com/questions/8840342/mongodb-dot-notation-wildcard

반응형