问题
How i can find length of each item in a "mol"
list:
For example if I am looking for "versionA" : "2.1.2"
I expect ot get following result:
{"project" : "A", "scene" : 13455312, mol:[3,2,1]},
{"project" : "B", "scene" : 13455344, mol:[3,3,3]}
My data:
{
"project" : "A",
"scene" : 13455312,
"versionA" : "2.1.2",
"versionB" : "2.1.9",
"mol" : [ {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }]}, {"data" : [ { "tran" : 'A' }]}]
},
{
"project" : "B",
"scene" : 13455344,
"versionA" : "2.1.2",
"versionB" : "2.1.9",
"mol" : [ {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}]
},
{
"project" : "C",
"scene" : 135555,
"versionA" : "2.1.3",
"versionB" : "2.1.9",
"mol" : [ {"data" : [ { "tran" : 'A' }]}, {"data" : [ { "tran" : 'A' }]}, {"data" : [ { "tran" : 'A' }]}]
}
回答1:
You can $match
to the version
field and $map
which iterates the mol
and $size
to calculate the the length of data field.
db.collection.aggregate(
[{
$match: {
"versionA": "2.1.2"
}
}, {
$project: {
_id: 0,
"project": 1,
"scene": 1,
"mol": {
$map: {
input: "$mol",
as: "mo",
in: {
$size: "$$mo.data"
}
}
}
}
}]
)
来源:https://stackoverflow.com/questions/42074686/how-to-count-items-in-list-of-lists