我在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()
他们两个都不行,有人可以建议我对此进行适当的查询吗?
答案 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" } } })