복붙노트

[MONGODB] MongoDB를이 - 어떻게 수집 안에 중첩 된 항목에 대한 쿼리하는?

MONGODB

MongoDB를이 - 어떻게 수집 안에 중첩 된 항목에 대한 쿼리하는?

나는 일부 데이터를 가지고 그 다음과 같다 :

[
    {
        "_id" : ObjectId("4e2f2af16f1e7e4c2000000a"),
        "advertisers" : [
            {
                "created_at" : ISODate("2011-07-26T21:02:19Z"),
                "category" : "Infinity Pro Spin Air Brush",
                "updated_at" : ISODate("2011-07-26T21:02:19Z"),
                "lowered_name" : "conair",
                "twitter_name" : "",
                "facebook_page_url" : "",
                "website_url" : "",
                "user_ids" : [ ],
                "blog_url" : "",
            },

나는이 같은 쿼리가 광고주의 ID를 줄 것이라고 생각했다 :

var start  = new Date(2011, 1, 1);
> var end  = new Date(2011, 12, 12);
> db.agencies.find( { "created_at" : {$gte : start , $lt : end} } , { _id : 1 , program_ids : 1 , advertisers { name : 1 }  } ).limit(1).toArray();

하지만 내 쿼리가 작동하지 않았다. 내가 얻고 싶은 분야의 내 목록에 중첩 된 요소 내부의 필드를 추가 할 수있는 방법 어떤 생각?

감사!

해결법

  1. ==============================

    1.사용 쿼리 (예를 들어, advertisers.name) 표기법을 점하고 중첩 된 객체의 필드를 검색 :

    사용 쿼리 (예를 들어, advertisers.name) 표기법을 점하고 중첩 된 객체의 필드를 검색 :

    db.agencies.find({
     "advertisers.created_at": {
       $gte: start,
       $lt: end
      }
     },
    {
     _id: 1,
      program_ids: 1,
      "advertisers.name": 1
     }
    }).limit(1).toArray();
    

    참조 : 필드의 하위 집합을 가져 그리고 점 표기법

  2. ==============================

    2.

    db.agencies.find( 
    { "advertisers.created_at" : {$gte : start , $lt : end} } , 
    { program_ids : 1 , advertisers.name : 1   } 
    ).limit(1).pretty();
    
  3. ==============================

    3.MongoDB를 그 당신이 요소의 배열 내에서 볼 수 있습니다 제공한다는 점 표기법이라는 한 가지가있다. 그것을 사용하면 입력 할 각 배열 점을 추가하는 등 간단하다.

    MongoDB를 그 당신이 요소의 배열 내에서 볼 수 있습니다 제공한다는 점 표기법이라는 한 가지가있다. 그것을 사용하면 입력 할 각 배열 점을 추가하는 등 간단하다.

    귀하의 경우에는

        "_id" : ObjectId("4e2f2af16f1e7e4c2000000a"),
        "advertisers" : [
            {
                "created_at" : ISODate("2011-07-26T21:02:19Z"),
                "category" : "Infinity Pro Spin Air Brush",
                "updated_at" : ISODate("2011-07-26T21:02:19Z"),
                "lowered_name" : "conair",
                "twitter_name" : "",
                "facebook_page_url" : "",
                "website_url" : "",
                "user_ids" : [ ],
                "blog_url" : "",
            },
            { ... }
    

    다음과 같은 : {쿼리 'advertisers.created_at'} 당신이 그들 각자 내부의 속성 created_at를 찾는 광고주의 배열 내부에 가고 싶은 경우에, 당신은 단순히 속성을 사용하여 쿼리를 작성할 수 있습니다

    db.agencies.find( { 'advertisers.created_at' : { {$gte : start , $lt : end} ... }
    
  4. from https://stackoverflow.com/questions/10885044/mongodb-how-to-query-for-a-nested-item-inside-a-collection by cc-by-sa and MIT license