programing

mongoDB 구별 및 같은 쿼리의 어디에 있습니까?

batch 2023. 4. 6. 21:22
반응형

mongoDB 구별 및 같은 쿼리의 어디에 있습니까?

다음과 같은 서류를 가지고 있다고 칩시다.

Article { Comment: embedMany }

Comment { Reply: embedMany }

Reply { email: string, ip: string }

구별되는 쿼리를 만들고 싶다.Reply.ip어디에Reply.email = xxx

이런 거, 근데 안 되네.

db.Article.find("Comment.Reply.email" : "xxx").distinct("Comment.Reply.ip")

JSON 내보내기:

{
   "_id":{
      "$oid":"4e71be36c6eed629c61cea2c"
   },
   "name":"test",
   "Comment":[
      {
         "name":"comment test",
         "Reply":[
            {
               "ip":"192.168.2.1",
               "email":"yyy"
            },
            {
               "ip":"127.0.0.1",
               "email":"zzz"
            }
         ]
      },
      {
         "name":"comment 2 test",
         "Reply":[
            {
               "ip":"128.168.1.1",
               "email":"xxx"
            },
            {
               "ip":"192.168.1.1",
               "email":"xxx"
            }
         ]
      }
   ]
}

실행:db.Article.distinct("Comment.Reply.ip",{"Comment.Reply.email" : "xxx"})

예상:["128.168.1.1", "192.168.1.1"]

다음과 같은 것이 있습니다.["127.0.0.1", "128.168.1.1", "192.168.1.1", "192.168.2.1"]

Distinct이와 같은 조건을 가진 mongo에서의 쿼리

 db.Article.distinct("Comment.Reply.ip",{"Comment.Reply.email" : "xxx"})

다른 방법은 없다

편집:

문제를 이해했습니다.서브 문서를 대조/필터링하려면 다음과 같이 $elemMatch 연산자를 사용해야 합니다.

  db.Article.distinct("Comment.Reply.ip",{Comment: {$elemMatch: {"Reply.email" : "xxx"}}})

단, 서브패키지에 서브배열이 포함되어 있는 경우(이 경우 응답배열)는 동작하지 않습니다.서브어레이에 $elemMatch가 오픈되어 있습니다.그리고 mongo 2.1로 예정되어 있습니다.자세한 내용은 링크를 참조하십시오.

이거 한번 써보세요.

db.Article.aggregate([
{$unwind: "$Comment"},
{$unwind: "$Comment.Reply"},
{$match: {"Comment.Reply.email": "xxx"}},
{$group: {_id: "$Comment.Reply.ip"}}
])

예시의 결과는 다음과 같습니다.

/* 1 */
{
    "_id" : "192.168.1.1"
}

/* 2 */
{
    "_id" : "128.168.1.1"
}

db.collection.distinct("field_name", query)

컬렉션의 모든 개별 값을 배열 형식으로 반환합니다.

field_name은 고유한 값을 반환하는 필드여야 합니다.

쿼리는 고유한 값을 검색할 문서를 지정합니다.예:-{"Comment.Reply.email" : "xxx"}또는{'country' : 'India','state' : 'MH','city' : 'mumbai'}

distinctdates=db.dailyreport_detailed.find(

{'uid':personemail,'month':searchdate2,'year':searchdate1}
)

.distinct('date_only')

여기서 find는 조건에 따라 검색되며, 마지막에 구별되는 고유한 날짜가 지정됩니다.

언급URL : https://stackoverflow.com/questions/7419986/mongodb-distinct-where-in-same-query

반응형