mongodb获取数组值

时间:2016-03-16 09:16:25

标签: java mongodb

我在mongodb中有以下类型的json文档:

{
 "_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"
    }
  ]
}
  ]
 }

如果我查询以获取名称的所有行,我使用以下查询:

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

这给了我正确的答案,但我应该怎样做才能找到定位品牌为人的行

即。我想要target.brand是“人”的文件。

到目前为止,我使用了以下查询,但它们不起作用

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

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

他们两个都不行,有人可以建议我对此进行适当的查询吗?

3 个答案:

答案 0 :(得分:3)

试试这个。

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

不确定嵌套是否有效。但值得一试!

答案 1 :(得分:0)

试试这个

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

E.g。 以下是我的收藏。并按预期运行子数组查询

> 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" : "pr@adventnet.com",
        "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" : [ ]
}
>

答案 2 :(得分:0)

你可以try this下面一个。

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

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