[英]Count and Update nested array in mongodb
I am new to using mongo db and have been trying to figure out a way to get count of an nested array in mongo db collection which looks like follows. 我是使用mongo db的新手,并且一直在尝试找出一种在mongo db集合中获取嵌套数组计数的方法,如下所示。
{
city_id: 'C1',
city_name: "C1Name",
wards: [{
ward_id: "W1",
ward_number: "1",
areas: [{
area_id: "a1",
area_name: "a1Name"
},
{
area_id: "a2",
area_name: "a2Name"
}]
},
{
ward_id: "W2",
ward_number: "2",
areas: [{
area_id: "a21",
area_name: "a21Name"
}, {
area_id: "a22",
area_name: "a22Name"
}]
}]
},
{
city_id: 'C2',
city_name: "C2Name",
wards: [{
ward_id: "W21",
ward_number: "21",
areas: [{
area_id: "aw21",
area_name: "aw21Name"
},{
area_id: "aw22",
area_name: "aw22Name"
}]
},{
ward_id: "W132",
ward_number: "132",
areas: [{
area_id: "a132",
area_name: "a132Name"
}, {
area_id: "a1332",
area_name: "a2112Name"
}]
}]
}
now here I want number of areas in city_details where city_id=C1 and ward_id=W1 现在在这里,我想要city_details中的区域数,其中city_id = C1和ward_id = W1
I used aggregation as 我用聚合作为
db.city_details.aggregate(
{$match:{"city_id":"C1"}},
{$project:{"wards":"$wards"}},
{$unwind:"$wards"},
{$project{"ward":"$wards.id","area":"$wards.areas"}},
{$match:{ward:"W1"}},
{$project:{$count:{"area"}}
)
This should get me count as 2 but it isn't working. 这应该让我算为2,但是它不起作用。
Also how do I update these areas arrays ? 另外,如何更新这些区域数组?
The reason your query doesn't work is because {$match:{ward:"W1"}}
can't find W1
within the previous result. 您的查询无效的原因是因为
{$match:{ward:"W1"}}
在上一个结果中找不到W1
。
The Result before running {$match:{ward:"W1"}}
looks like this: 运行
{$match:{ward:"W1"}}
之前的结果如下:
{
"area" : [
{
"area_id" : "a1",
"area_name" : "a1Name"
},
{
"area_id" : "a2",
"area_name" : "a2Name"
}
]
},
{
"area" : [
{
"area_id" : "a21",
"area_name" : "a21Name"
},
{
"area_id" : "a22",
"area_name" : "a22Name"
}
]
}
There is no W1
to find. 没有
W1
可以找到。
Instead you can use a query like this: 相反,您可以使用如下查询:
db.city_details.aggregat([
{$match: {"city_id": "C1"}},
{$project: {"ward": {$filter: {"input": "$wards", "as": "ward", "cond": { $eq: ["$$ward.ward_id", "W1"]}}}}},
{$unwind:"$ward"},
{$project: {"size": {$size: "$ward.areas"}}}
])
Regarding to your second question. 关于第二个问题。 It's not that easy, this post will give you more to read about updating nested arrays in mongodb.
并不是那么容易, 这篇文章将使您更多地了解如何更新mongodb中的嵌套数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.