Ankita Bhowmik
Ankita Bhowmik

Reputation: 463

mongodb fetching array values

I have the following kind json documents in mongodb:

{
 "_id": ObjectId("56e244828581920a1d32fdd5"),
 "name": "ValentinesCampaign1457669250012",
 "owner": "Ashis",
 "lines": [
   {
  "name": "Apparels1457669250012",
  "number": 19128,
  "startDate": "4-5-2016:8",
  "endDate": "2-12-2020:14",
  "targeting": [
    {
      "brand": "PEOPLE",
      "channels": [
        "ch60",
        "ch90",
        "ch10",
        "ch30",
        "ch50"
      ],
      "keywords": [
        "dress",
        "skirts",
        "bags",
        "stilletoes",
        "perfume",
        "purse"
      ]
    }
  ],
  "exclusions": [
    {
      "channels": [
        "ch88",
        "ch22",
        "ch101"
      ],
      "keywords": [
        "gun",
        "knife",
        "pistol"
      ]
    }
  ],
  "creatives": [
    {
      "url": "http://www.people.com/people/",
      "weight": 0.44,
      "startDate": "4-10-2016:6",
      "endDate": "5-5-2019:3"
    }
  ]
}
  ]
 }

if I query to get all the lines with name I use the following query:

db.campaigns.find({ lines: { $elemMatch: {name :"Apparels1457669250012" } } }  ).pretty()

which gives me the correct answer but what should I do to get the lines in which the targeting brand is people

i.e. I want the documents whose targeting.brand is "people".

By far I have used the following queries but they dont work

db.campaigns.find({ lines: { $elemMatch: {name :"Apparels1457669250012" ,targeting :{$elemMatch:{"brand":"people"}} }} }  ).pretty()

and

db.campaigns.find({ lines.$.targeting: { $elemMatch: {brand :"people" } } }  ).pretty()

both of them dont work , can someone suggest me a proper query for this?

Upvotes: 2

Views: 108

Answers (3)

Kaushal
Kaushal

Reputation: 938

Try this.

db.campaigns.find({
          lines:{ 
              $elemMatch: {
                     targeting: {
                           $elemMatch: {
                                brand: "PEOPLE"
                                       }
                                }
                          }
            }
})

Not sure if nesting works. But worth a try!

Upvotes: 3

swapneel
swapneel

Reputation: 3061

try this

db.campaigns.find({ lines.name :"Apparels1457669250012",lines.targeting.brand : "PEOPLE" }).pretty()

E.g. Below is my Collection. and running sub array query will result as expected

> db.companies.find({"name" : "AdventNet","relationships.person.first_name" : "S
ridhar"}).limit(1).pretty()

> db.companies.find({"name" : "AdventNet"}).limit(1).pretty()
{
        "_id" : ObjectId("52cdef7c4bab8bd675297d8b"),
        "name" : "AdventNet",
        "permalink" : "abc3",
        "crunchbase_url" : "http://www.crunchbase.com/company/adventnet",
        "homepage_url" : "http://adventnet.com",
        "blog_url" : "",
        "blog_feed_url" : "",
        "twitter_username" : "manageengine",
        "category_code" : "enterprise",
        "number_of_employees" : 600,
        "founded_year" : 1996,
        "deadpooled_year" : 2,
        "tag_list" : "",
        "alias_list" : "Zoho ManageEngine ",
        "email_address" : "[email protected]",
        "phone_number" : "925-924-9500",
        "description" : "Server Management Software",
        "created_at" : ISODate("2007-05-25T19:24:22Z"),
        "updated_at" : "Wed Oct 31 18:26:09 UTC 2012",
        "overview" : "<p>AdventNet is now <a href=\"/company/zoho-manageengine\"
 title=\"Zoho ManageEngine\" rel=\"nofollow\">Zoho ManageEngine</a>.</p>\n\n<p>F
ounded in 1996, AdventNet has served a diverse range of enterprise IT, networkin
g and telecom customers.</p>\n\n<p>AdventNet supplies server and network managem
ent software.</p>",
        "image" : {
                "available_sizes" : [
                        [
                                [
                                        150,
                                        55
                                ],
                                "assets/images/resized/0001/9732/19732v1-max-150
x150.png"
                        ],
                        [
                                [
                                        150,
                                        55
                                ],
                                "assets/images/resized/0001/9732/19732v1-max-250
x250.png"
                        ],
                        [
                                [
                                        150,
                                        55
                                ],
                                "assets/images/resized/0001/9732/19732v1-max-450
x450.png"
                        ]
                ]
        },
        "products" : [ ],
        "relationships" : [
                {
                        "is_past" : true,
                        "title" : "CEO and Co-Founder",
                        "person" : {
                                "first_name" : "Sridhar",
                                "last_name" : "Vembu",
                                "permalink" : "sridhar-vembu"
                        }
                },
                {
                        "is_past" : true,
                        "title" : "VP of Business Dev",
                        "person" : {
                                "first_name" : "Neil",
                                "last_name" : "Butani",
                                "permalink" : "neil-butani"
                        }
                },
                {
                        "is_past" : true,
                        "title" : "Usabiliy Engineer",
                        "person" : {
                                "first_name" : "Bharath",
                                "last_name" : "Balasubramanian",
                                "permalink" : "bharath-balasibramanian"
                        }
                },
                {
                        "is_past" : true,
                        "title" : "Director of Engineering",
                        "person" : {
                                "first_name" : "Rajendran",
                                "last_name" : "Dandapani",
                                "permalink" : "rajendran-dandapani"
                        }
                },
                {
                        "is_past" : true,
                        "title" : "Market Analyst",
                        "person" : {
                                "first_name" : "Aravind",
                                "last_name" : "Natarajan",
                                "permalink" : "aravind-natarajan"
                        }
                },
                {
                        "is_past" : true,
                        "title" : "Director of Product Management",
                        "person" : {
                                "first_name" : "Hyther",
                                "last_name" : "Nizam",
                                "permalink" : "hyther-nizam"
                        }
                },
                {
                        "is_past" : true,
                        "title" : "Western Regional OEM Sales Manager",
                        "person" : {
                                "first_name" : "Ian",
                                "last_name" : "Wenig",
                                "permalink" : "ian-wenig"
                        }
                }
        ],
        "competitions" : [ ],
        "providerships" : [
                {
                        "title" : "DHFH",
                        "is_past" : true,
                        "provider" : {
                                "name" : "A Small Orange",
                                "permalink" : "a-small-orange"
                        }
                }
        ],
        "total_money_raised" : "$0",
        "funding_rounds" : [ ],
        "investments" : [ ],
        "acquisition" : null,
        "acquisitions" : [ ],
        "offices" : [
                {
                        "description" : "Headquarters",
                        "address1" : "4900 Hopyard Rd.",
                        "address2" : "Suite 310",
                        "zip_code" : "94588",
                        "city" : "Pleasanton",
                        "state_code" : "CA",
                        "country_code" : "USA",
                        "latitude" : 37.692934,
                        "longitude" : -121.904945
                }
        ],
        "milestones" : [ ],
        "video_embeds" : [ ],
        "screenshots" : [
                {
                        "available_sizes" : [
                                [
                                        [
                                                150,
                                                94
                                        ],
                                        "assets/images/resized/0004/3400/43400v1
-max-150x150.png"
                                ],
                                [
                                        [
                                                250,
                                                156
                                        ],
                                        "assets/images/resized/0004/3400/43400v1
-max-250x250.png"
                                ],
                                [
                                        [
                                                450,
                                                282
                                        ],
                                        "assets/images/resized/0004/3400/43400v1
-max-450x450.png"
                                ]
                        ],
                        "attribution" : null
                }
        ],
        "external_links" : [ ],
        "partners" : [ ]
}
>

Upvotes: 0

Thalaivar
Thalaivar

Reputation: 23622

Can you try this one below.

db.campaigns.find({
  lines.name: 'Apparels1457669250012',
  targeting: { $elemMatch: { brand: 'PEOPLE' } }
},'targeting')

OR

db.campaigns.find( { lines.name: "Apparels1457669250012"}, { targeting: { $elemMatch: { brand: "PEOPLE" } } })

Upvotes: 0

Related Questions